Compare commits

...

3 Commits

Author SHA1 Message Date
cxykevin f329f83ec0 添加更多命令行功能 2024-05-04 22:07:05 +08:00
cxykevin 01a31a2578 添加主页 2024-05-04 21:27:20 +08:00
cxykevin 1e01289d53 添加命令行选项及tracer 2024-05-03 18:47:22 +08:00
11 changed files with 276 additions and 50 deletions

11
.vscode/launch.json vendored
View File

@ -9,7 +9,16 @@
"type": "debugpy",
"request": "launch",
"program": "main.py",
"args": "--debug",
"console": "integratedTerminal"
}
},
{
"name": "Python 包含参数",
"type": "debugpy",
"request": "launch",
"program": "main.py",
"console": "integratedTerminal",
"args": "${command:pickArgs}"
},
]
}

View File

@ -1,4 +1,4 @@
{
"python.analysis.typeCheckingMode": "off",
"python.analysis.autoImportCompletions": true
"python.analysis.autoImportCompletions": false
}

1
VERSION Normal file
View File

@ -0,0 +1 @@
0.0.1

View File

@ -2,7 +2,9 @@ UnsupportedSystem = "当前操作系统不受支持"
PermissionDeniedLinux = "在 linux 操作系统系统下,请使用 root 权限进行安装"
PermissionDeniedWin = "权限不足,请以管理员身份运行此程序"
InstallWelcome = "欢迎安装 PEInjector"
UpgradeWelcome = "更新 PEInjector"
InstallInfo = "PEinjector 是增强 WindowsPE 的一个工具和平台"
UpgradeInfo = "接下来将更新 PEinjector 和 ventoy"
DownloadInstallTitle = "下载必要文件"
DownloadInstall = "在开始之前,我们需要下载一些依赖文件\n如果您的网络状况不佳请手动下载 peinjector 和 ventoy 并解压到 software 文件夹"
StartInstall = "开始安装"
@ -17,5 +19,7 @@ InstallIjTitle = "安装 PEinjector"
InstallIjInfo = "PEinjector主程序正在安装中请稍等"
FinishInstall = "完成安装"
InstallFinishTitle = "安装已完成"
InstallFinishInfo = "PEinjector已经安装到您的设备\n点击下方按钮关闭程序并重新启动以管理 PEinjector"
InstallFinishBtn = "关闭"
InstallFinishInfo = "PEinjector已经安装到您的设备\n点击下方按钮重新启动程序以管理 PEinjector"
InstallFinishBtn = "重启"
HomeWelcome = "欢迎使用 PEinjector"
HomeInfo = "一个增强 WindowsPE 的一个工具和平台\n点击下方版本号进行更新"

1
lib/vars.py Normal file
View File

@ -0,0 +1 @@
DISKMOUNT = ""

View File

@ -14,10 +14,10 @@ levels = {
}
def init() -> None:
def log_init() -> None:
logging.basicConfig(filename=config.LOGPATH,
format='[%(asctime)s][%(levelname)s] %(message)s',
level=levels[config.LOGLEVEL])
level=levels[config.LOGLEVEL], filemode='w')
def info(msg: str) -> None:
@ -53,3 +53,7 @@ def print(*args, end="\n") -> None:
if (10 >= levels[config.LOGLEVEL]):
sys.stdout.write(msg + end)
logging.debug(msg)
def trace_sys(msg: str) -> None:
logging.info(msg)

View File

@ -1,3 +1,3 @@
from ui import win
if __name__ == "__main__":
win.main()
win.run()

BIN
res/smile.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

65
ui/homeui.py Normal file
View File

@ -0,0 +1,65 @@
import os
import sys
from magictk import mtk, color_tmpl
from magictk import fontconfig
from ui.lang import l
from logger.logger import *
from lib import vars
from tkinter import Label as tkLabel
now_frame = None
master: mtk.Frame = None
def show_home_page():
global now_frame, master
first_page = mtk.Frame(master)
mtk.Frame(first_page, w=10000).pack(fill="both", expand=True)
smileimg = mtk.PhotoImage(file="res"+os.sep+"smile.gif")
frames = mtk.Frame(first_page)
smilelabel = tkLabel(frames, image=smileimg,
background=color_tmpl.default_color["background"])
smilelabel.pack()
smilelabel.image = smileimg
frames.pack(fill='x')
mtk.Frame(first_page, w=10000, height=40).pack(fill="x")
mtk.Label(first_page, text=l("HomeWelcome"),
anchor='center', font=(fontconfig.getfont(), 20), background=color_tmpl.default_color["background"], foreground=color_tmpl.default_color["primary_text"]).pack(fill='x')
mtk.Label(first_page, text="\n"+l("HomeInfo"),
anchor='center', font=(fontconfig.getfont(), 10), background=color_tmpl.default_color["background"], foreground=color_tmpl.default_color["secondary_text"]).pack(fill='x')
mtk.Frame(first_page, height=30).pack()
buttonlist = mtk.Frame(first_page)
with open(vars.DISKMOUNT+os.sep+"PEinjector"+os.sep+"VERSION", 'r') as file:
version = file.read().replace("\n", "")
with open("VERSION", 'r') as file:
hubversion = file.read().replace("\n", "")
def restart_to_update(*args):
warn("[homeui]start update, exit")
python_path = sys.executable
os.execl(python_path, python_path, __file__.replace(
"ui"+os.sep+"homeui.py", "main.py"), "--upgrade", "--dis-permission-error")
def open_update(*args):
info("[homeui]open in webbrowser")
__import__("webbrowser").open(
"http://git.hmtsai.cn/cxykevin/injectorHub")
mtk.Frame(buttonlist, height=10).pack(side="left")
mtk.ButtonLight(buttonlist, text="PEinjector "+version,
w=140, func=restart_to_update, color_type="success").pack(side="left")
mtk.ButtonLight(buttonlist, text="Hub "+hubversion,
w=100, color_type="primary", func=open_update).pack(side="left")
buttonlist.pack()
mtk.Frame(first_page, w=10000).pack(fill="both", expand=True)
first_page.pack(fill="both", expand=True)
now_frame = first_page
def home_ui(root: mtk.Frame):
global master
install_root_frame = mtk.Frame(root)
master = install_root_frame
show_home_page()
install_root_frame.pack(fill="both", expand=True)

View File

@ -1,6 +1,5 @@
import json
import os
from turtle import bgcolor
from magictk import mtk, color_tmpl
from magictk import fontconfig
from ui.lang import l
@ -12,13 +11,20 @@ from logger.logger import *
now_frame = None
master: mtk.Frame = None
UPGRADE = 0
def show_first_page():
global now_frame, master
first_page = mtk.Frame(master,)
mtk.Frame(first_page, w=10000).pack(fill="both", expand=True)
mtk.Label(first_page, text=l("InstallWelcome"),
if (UPGRADE):
mtk.Label(first_page, text=l("UpgradeWelcome"),
anchor='center', font=(fontconfig.getfont(), 22), background=color_tmpl.default_color["background"], foreground=color_tmpl.default_color["primary_text"]).pack(fill='x')
mtk.Label(first_page, text="\n"+l("InstallInfo"),
anchor='center', font=(fontconfig.getfont(), 12), background=color_tmpl.default_color["background"], foreground=color_tmpl.default_color["secondary_text"]).pack(fill='x')
else:
mtk.Label(first_page, text=l("UpgradeWelcome"),
anchor='center', font=(fontconfig.getfont(), 22), background=color_tmpl.default_color["background"], foreground=color_tmpl.default_color["primary_text"]).pack(fill='x')
mtk.Label(first_page, text="\n"+l("InstallInfo"),
anchor='center', font=(fontconfig.getfont(), 12), background=color_tmpl.default_color["background"], foreground=color_tmpl.default_color["secondary_text"]).pack(fill='x')
@ -279,8 +285,10 @@ def change_page_finish():
anchor='center', font=(fontconfig.getfont(), 12), background=color_tmpl.default_color["background"], foreground=color_tmpl.default_color["secondary_text"]).pack(fill='x')
def closecallback(*args):
info("close from installer")
finish_page.root.quit()
warn("restart from installer")
python_path = sys.executable
os.execl(python_path, python_path, __file__.replace(
"ui"+os.sep+"installer.py", "main.py"))
btnframe = mtk.Frame(finish_page, height=30)
mtk.ButtonFill(finish_page, text=l(

150
ui/win.py
View File

@ -1,9 +1,13 @@
import shutil
from tkinter import messagebox
from magictk import mtk
from logger.logger import *
from logger import config
from ui import nav
from ui import installer
from ui import homeui
from lib import get_disk
from lib import vars
from ui.lang import load_lang, l
import sys
import getpass
@ -11,34 +15,149 @@ import platform
import ctypes
import os
import locale
init()
import traceback
import textwrap
nlang = locale.getdefaultlocale()[0].lower()
def check_args(arg, check):
if len(arg) >= len(check):
if (arg[:len(check)] == check):
return 1
return 0
DISPERMISSION = 0
DEBUG = 0
NOTRACE = 0
UPGRADE = 0
DEVICE = ""
SHOW_VERSION = 0
for i in sys.argv[1:]:
if (check_args(i, "/?") or check_args(i, "--help")):
print(""" injector Hub
Usage: hub [options]
Options:
--help Show this help info and exit
--version, -V Get hub version
--lang=<zh_cn/en_us> Set language
--install, -i Install PEinjector
--upgrade, -U Upgrade PEinjector
--device, -D Set device (mount path)
--clean Clean download cache
Debug Options:
--debug Open debug mode (raise all errors)
--dis-permission-error Do not show permission error
--log-level=<level> Set log level (debug,info,warning,err)
--no-trace Do not trace OS version
""")
sys.exit()
elif (check_args(i, "--lang")):
nlang = i.split("=")[-1]
elif (check_args(i, "--dis-permission-error")):
DISPERMISSION = 1
elif (check_args(i, "--log-level")):
config.LOGLEVEL = i.split("=")[-1]
elif (check_args(i, "--debug")):
DEBUG = 1
elif (check_args(i, "--no-trace")):
NOTRACE = 1
elif (check_args(i, "--upgrade") or check_args(i, "-U")):
UPGRADE = 1
elif (check_args(i, "--install") or check_args(i, "-i")):
UPGRADE = 2
elif (check_args(i, "--device") or check_args(i, "-D")):
DEVICE = i.split("=")[-1]
elif (check_args(i, "--clean")):
if (os.path.exists("software")):
info("[win]clean install cache")
shutil.rmtree("software")
sys.exit()
elif (check_args(i, "--version") or check_args(i, "-V")):
SHOW_VERSION = 1
else:
print("Unknown Command: \""+i+"\"\nUse Command \"--help\" to get info")
sys.exit(128)
if (nlang+".toml" not in os.listdir("lang")):
nlang = "en_us"
def main():
log_init()
if (DEBUG == 1):
info("[win]< debug mode >")
if (NOTRACE == 0):
info("[trace]open trace")
trace_sys(f"[trace]OS={platform.system()}")
trace_sys(f"[trace]VER={platform.version()}")
trace_sys(f"[trace]CPU={platform.processor()}")
trace_sys(f"[trace]ARCH={str(platform.architecture()[0])}")
trace_sys(f"[trace]PYVER={platform.python_version()}")
trace_sys(f"[trace]PYIMP={platform.python_implementation()}")
load_lang(nlang)
disk_res = get_disk.find_hub_disk()
errno = disk_res[0]
if (DEVICE == ""):
root_disk = disk_res[1]
else:
root_disk = DEVICE
if (errno == 1):
messagebox.showerror("Injector Hub Error", root_disk)
sys.exit(1)
elif (errno == 2):
if (SHOW_VERSION == 1):
with open("VERSION", 'r') as file:
ver = file.read()
print(f" injector Hub \n\nHub Version: "+ver)
if (DEVICE == "" and errno == 2):
print("PEinjector Version: Not Found")
elif not (os.path.exists(root_disk+os.sep+"PEinjector"+os.sep+"VERSION")):
print("PEinjector Version: Not Found")
else:
with open(root_disk+os.sep+"PEinjector"+os.sep+"VERSION", 'r') as file:
pver = file.read()
print("PEinjector Version: "+pver)
sys.exit()
if (errno == 2 or UPGRADE == 1 or UPGRADE == 2):
if (UPGRADE == 0):
info("[win]cannot find installed disk")
elif (UPGRADE == 1):
info("[win]upgrade")
if DISPERMISSION == 0:
if (platform.system() == "Linux" and getpass.getuser() != "root"):
messagebox.showerror("Injector Hub Error", l("PermissionDeniedLinux"))
err("permission denied in linux")
messagebox.showerror("Injector Hub Error",
l("PermissionDeniedLinux"))
if (DEBUG == 0):
sys.exit(1)
else:
sys.exit()
if (platform.system() == "Windows" and ctypes.windll.shell32.IsUserAnAdmin() == False):
messagebox.showerror("Injector Hub Error", l("PermissionDeniedWin"))
err("permission denied in windows")
messagebox.showerror("Injector Hub Error",
l("PermissionDeniedWin"))
if (DEBUG == 0):
sys.exit(1)
else:
sys.exit()
installer.UPGRADE = 1
if (UPGRADE == 1):
if (os.path.exists("software")):
info("[win]clean install cache")
shutil.rmtree("software")
nav_list = [
{"icon": "lightning", "frame": installer.installer_ui, "side": "top"}
]
else:
vars.DISKMOUNT = root_disk
info(f"[win]found installed disk \"{root_disk}\"")
nav_list = [
{"icon": "home-filled", "frame": None, "side": "top"},
{"icon": "home-filled", "frame": homeui.home_ui, "side": "top"},
{"icon": "dvd", "frame": None, "side": "top"},
{"icon": "plugin", "frame": None, "side": "top"},
{"icon": "setting", "frame": None, "side": "bottom"}
@ -52,7 +171,22 @@ main_frame = mtk.Frame(main_win, w=10000)
nav.pack_nav(main_win, main_frame, nav_list)
main_frame.pack(side="left", fill="both", expand=True)
def main():
info("[win]mainloop")
main_win.mainloop()
def run():
try:
main()
except Exception as exp:
err("[errtrace] caught err:"+repr(exp))
for i in traceback.format_exc().split("\n"):
firstlen_flag = "* "
lastlen = ""
for j in textwrap.wrap(i, width=40):
err("[errtrace]"+" "+firstlen_flag+" " *
(len(lastlen)-len(lastlen.lstrip()))+j)
lastlen = " " * (len(lastlen)-len(lastlen.lstrip()))+j
firstlen_flag = " "
if (DEBUG == 1):
raise