diff --git a/help/index.html b/Help/index.html
similarity index 100%
rename from help/index.html
rename to Help/index.html
diff --git a/Language.json b/Language.json
index 16129a4..6cbff77 100644
--- a/Language.json
+++ b/Language.json
@@ -18,7 +18,8 @@
                         "Name": "程序",
                         "Menu": [
                             "清空软件历史记录",
-                            "退出程序"
+                            "退出程序",
+                            "程序设置"
                         ]
                     },
                     {
@@ -112,7 +113,9 @@
                         "Menu": [
                             "程序官网",
                             "关于",
-                            "反馈程序问题和建议"
+                            "反馈程序问题和建议",
+                            "检查更新",
+                            "更多帮助"
                         ]
                     }
                 ]
@@ -152,7 +155,8 @@
                         "Name": "Program",
                         "Menu": [
                             "Clean Program History",
-                            "Exit The Program"
+                            "Exit The Program",
+                            "Program Setting"
                         ]
                     },
                     {
@@ -246,7 +250,9 @@
                         "Menu": [
                             "Program WebSize",
                             "Program Help",
-                            "Upload Problem And Advice"
+                            "Upload Problem And Advice",
+                            "ABout This Program",
+                            "More Help"
                         ]
                     }
                 ]
diff --git a/README.md b/README.md
index 3a371c9..be2cf48 100755
--- a/README.md
+++ b/README.md
@@ -17,7 +17,10 @@
 ##### 目前更新内容
 **※1、更换了新的图标(暂未全部更新完成!)**  
 **※2、支持程序的评分和查看分数详情的功能(如果炸了我的服务器,这个就作废了)**  
-**※3、修复了在安装奇奇怪怪的安装包(如格式、标识不正确的)时的快捷方式图标为空以及快捷方式文本的变化**
+**※3、修复了在安装奇奇怪怪的安装包(如格式、标识不正确的)时的快捷方式图标为空以及快捷方式文本的变化**  
+**※4、添加更新功能,可以自行升级到最新版本(如果炸了我的服务器,这个就作废了)**  
+**※5、新增程序帮助**  
+6、新填彩蛋(在“关于”=>“关于”显示的窗口双击“关于”开启)(如果炸了我的服务器,这个就作废了)  
 
 #### V1.5.3(2021-12-12,DDUC11版):
 ##### 更新内容
diff --git a/information.json b/information.json
index ab6a395..7cad6cb 100755
--- a/information.json
+++ b/information.json
@@ -1,4 +1,5 @@
 {
+    "Package": "spark-uengine-runner",
     "Url": [
         "https://gitee.com/gfdgd-xi/uengine-runner",
 		"https://github.com/gfdgd-xi/uengine-runner"
@@ -21,6 +22,13 @@
         "5、如果想要使用adb连接UEngine或其他手机,请使用 1.2.0 以前的版本。(如需连接UEngine请安装adb补丁)"
     ],
     "Update": [
+        "V1.6.0:",
+        "※1、更换了新的图标(暂未全部更新完成!)",
+        "※2、支持程序的评分和查看分数详情的功能(如果炸了我的服务器,这个就作废了)",
+        "※3、修复了在安装奇奇怪怪的安装包(如格式、标识不正确的)时的快捷方式图标为空以及快捷方式文本的变化",
+        "※4、添加更新功能,可以自行升级到最新版本(如果炸了我的服务器,这个就作废了)",
+        "※5、新增程序帮助",
+        "6、新填彩蛋(在“关于”=>“关于”显示的窗口双击“关于”开启)(如果炸了我的服务器,这个就作废了)",
         "V1.5.3:",
         "※1、修复了在 UOS 家庭版安装 apk 文件安装包信息为 None 的问题",
         "※2、“添加/删除 UEngine 图标”窗口的写入按钮在目录~/.local/share/icons/hicolor/256x256/apps不存在时点击无反应,参考报错",
diff --git a/main.py b/main.py
index 505ca2a..da2ea10 100755
--- a/main.py
+++ b/main.py
@@ -38,6 +38,7 @@ import tkinter.filedialog as filedialog
 import tkinter.simpledialog as simpledialog
 from getxmlimg import getsavexml
 
+win = tk.Tk()  # 创建窗口
 
 # 卸载程序
 def UninstallProgram(package: "apk 包名")->"卸载程序":
@@ -45,8 +46,8 @@ def UninstallProgram(package: "apk 包名")->"卸载程序":
         global fineUninstallApkHistory 
         Return = GetCommandReturn("pkexec /usr/bin/uengine-session-launch-helper -- uengine uninstall --pkg='{}'".format(package))
         print(Return)
-        if os.path.exists("{}/.local/share/applications/{}.desktop".format(get_home(), package)):
-            os.remove("{}/.local/share/applications/{}.desktop".format(get_home(), package))
+        if os.path.exists("{}/.local/share/applications/uengine/{}.desktop".format(get_home(), package)):
+            os.remove("{}/.local/share/applications/uengine/{}.desktop".format(get_home(), package))
         if os.path.exists("{}/{}.desktop".format(get_desktop_path(), package)):
             os.remove("{}/{}.desktop".format(get_desktop_path(), package))
         findApkHistory.append(ComboInstallPath.get())
@@ -70,6 +71,7 @@ def ButtonClick8():
         path = GetApkPackageName(ComboInstallPath.get())
     else:
         path = ComboInstallPath.get()
+    print(path)
     threading.Thread(target=UninstallProgram, args=[path]).start()
 
 # 浏览窗口
@@ -97,9 +99,14 @@ def Button3Install():
 # 安装应用
 def InstallApk(path: "apk 路径", quit: "是否静默安装" = False):
     try:
+        if not os.path.exists("/tmp/uengine-runner"):
+            os.makedirs("/tmp/uengine-runner")
         if not os.path.exists("{}/.local/share/applications/uengine/".format(get_home())):
             print("Mkdir")
             os.makedirs("{}/.local/share/applications/uengine/".format(get_home()))
+        # 读取设置
+        setting = json.loads(readtxt(get_home() + "/.config/uengine-runner/setting.json"))
+        # 安装应用
         print("start install apk")
         global findApkHistory
         print("start install apk12")
@@ -110,6 +117,14 @@ def InstallApk(path: "apk 路径", quit: "是否静默安装" = False):
         if not os.path.exists(iconSaveDir):
             os.makedirs(iconSaveDir,exist_ok=True)
         SaveApkIcon(path, iconSavePath)
+        try:
+            if setting["SaveApk"]:
+                shutil.copy(path, "/tmp/uengine-runner/bak.apk")
+        except:
+            if not messagebox.askyesno(title="错误", message="无法备份安装包,是否不备份安装包继续安装?\n提示:新版UEngine安装后会自动删除安装包"):
+                DisabledAndEnbled(False)
+                return
+            setting["SaveApk"] = False
         print("start install apk2")
         BuildUengineDesktop(GetApkPackageName(path), GetApkActivityName(path), GetApkChineseLabel(path), iconSavePath,
                             "{}/{}.desktop".format(get_desktop_path(), GetApkPackageName(path)))
@@ -118,6 +133,11 @@ def InstallApk(path: "apk 路径", quit: "是否静默安装" = False):
                             "{}/.local/share/applications/uengine/{}.desktop".format(get_home(), GetApkPackageName(path)))
         commandReturn = GetCommandReturn("pkexec /usr/bin/uengine-session-launch-helper -- uengine install --apk='{}'".format(path))
         print(commandReturn)
+        try:
+            if setting["SaveApk"]:
+                shutil.copy("/tmp/uengine-runner/bak.apk", path)
+        except:
+            messagebox.showerror(title="错误", message="无法还原安装包\n提示:新版UEngine安装后会自动删除安装包,备份的Apk在/tmp/uengine-runner/bak.apk,电脑重启后就会丢失!")
         print("\nprint install complete")
         if quit:
             print(commandReturn)
@@ -349,6 +369,8 @@ def GetApkChineseLabel(apkFilePath)->"获取软件的中文名称":
 # 保存apk图标
 def SaveApkIcon(apkFilePath, iconSavePath)->"保存 apk 文件的图标":
     try:
+        if os.path.exists(iconSavePath):
+            os.remove(iconSavePath)
         info = GetApkInformation(apkFilePath)
         for line in info.split('\n'):
             if "application:" in line:
@@ -633,24 +655,61 @@ def GetApkVersion(apkFilePath):
 
 def VersionCheck(version1, version2):
     return version1 == version2
-        
+
+def ShowHelp():
+    webbrowser.open_new_tab(programPath + "/Help/index.html")
+
+class SettingWindow():
+    saveApkOption = tk.IntVar()
+    def ShowWindow():
+        setting = tk.Toplevel()
+        setting.resizable(0, 0)
+        setting.iconphoto(False, tk.PhotoImage(file=iconPath))
+        setting.title("设置 UEngine 运行器" + version)
+        saveApkFrame = ttk.LabelFrame(setting, text="Apk 安装设置")
+        try:
+            data = json.loads(readtxt(get_home() + "/.config/uengine-runner/setting.json"))
+        except:
+            messagebox.showerror(title="错误", message="读取设置错误!无法打开设置窗口!")
+            setting.destroy()
+        SettingWindow.saveApkOption = tk.IntVar()
+        SettingWindow.saveApkOption.set(int(data["SaveApk"]))
+        ttk.Radiobutton(saveApkFrame, text="不备份Apk包直接安装", value=0, variable=SettingWindow.saveApkOption).pack(anchor=tk.W)
+        ttk.Radiobutton(saveApkFrame, text="备份Apk包然后在安装后自动拷贝原先目录", value=1, variable=SettingWindow.saveApkOption).pack(anchor=tk.W)
+        controlFrame = ttk.Frame(setting)
+        ttk.Button(controlFrame, text="取消", command=setting.destroy).grid(row=0, column=0)
+        ttk.Button(controlFrame, text="保存", command=SettingWindow.SaveSetting).grid(row=0, column=1)
+        saveApkFrame.pack()
+        controlFrame.pack(anchor=tk.E)
+    def SaveSetting():
+        try:
+            write_txt(get_home() + "/.config/uengine-runner/setting.json", json.dumps({"SaveApk": bool(SettingWindow.saveApkOption.get())}))
+        except:
+            traceback.print_exc()
+            messagebox.showerror(title="错误", message="保存设置错误!")
+            return
+        messagebox.showinfo(title="提示", message="设置保存完毕!")
+
 class UpdateWindow():
+    data = {}
     def ShowWindow():
         update = tk.Toplevel()
         update.title("检查更新")
+        update.resizable(0, 0)
+        update.iconphoto(False, tk.PhotoImage(file=iconPath))
         versionLabel = ttk.Label(update, text="当前版本:{}\n最新版本:未知\n更新内容:".format(version))
         updateText = tk.Text(update)
         controlFrame = ttk.Frame(update)
-        ok = ttk.Button(controlFrame, text="更新", command=UpdateWindow.Update)
+        ok = ttk.Button(controlFrame, text="更新(更新过程中会关闭所有Python应用,包括这个应用)", command=UpdateWindow.Update)
         cancel = ttk.Button(controlFrame, text="取消", command=update.destroy)
         try:
-            data = json.loads(requests.get("http://120.25.153.144/uengine-runner/update.json").text)
-            versionLabel = ttk.Label(update, text="当前版本:{}\n最新版本:{}\n更新内容:".format(version, data["Version"]))
-            if data["Version"] == version:
+            UpdateWindow.data = json.loads(requests.get("http://120.25.153.144/uengine-runner/update.json").text)
+            versionLabel = ttk.Label(update, text="当前版本:{}\n最新版本:{}\n更新内容:".format(version, UpdateWindow.data["Version"]))
+            if UpdateWindow.data["Version"] == version:
                 updateText.insert("0.0", "此为最新版本,无需更新")
                 ok.configure(state=tk.DISABLED)
             else:
-                updateText.insert("0.0", data["New"])
+                updateText.insert("0.0", UpdateWindow.data["New"].replace("\\n", "\n"))
         except:
             traceback.print_exc()
             messagebox.showerror(title="错误", message="无法连接服务器!")
@@ -663,9 +722,29 @@ class UpdateWindow():
         ok.grid(row=0, column=1)
         update.mainloop()
     def Update():
-        os.system("")
+        if not os.path.exists("/tmp/uengine-runner/update"):
+            os.makedirs("/tmp/uengine-runner/update")
+        try:            
+            write_txt("/tmp/uengine-runner/update.sh", """#!/bin/bash
+echo 删除多余的安装包
+rm -rfv /tmp/uengine-runner/update/*
+echo 关闭“UEngine 运行器”以及其它“Python 应用”
+killall python3
+echo 下载安装包
+wget -P /tmp/uengine-runner/update {}
+echo 安装安装包
+dpkg -i /tmp/uengine-runner/update/*.deb
+echo 修复依赖关系
+apt install -f -y
+notify-send -i uengine "更新完毕!"
+zenity --info --text=\"更新完毕!\" --ellipsize
+""".format(UpdateWindow.data["Url"][int(information["Package"] == "com.gitee.uengine.runner.spark")], iconPath))
+        except:
+            traceback.print_exc()
+            easygui.textbox(title="错误", msg="更新出现错误,无法继续更新!", text=traceback.format_exc())
+        os.system("deepin-terminal -e pkexec bash /tmp/uengine-runner/update.sh")
         
-
+image = None
 class ApkInformation():
     def ShowWindows():
         global fullInformation
@@ -677,6 +756,7 @@ class ApkInformation():
             messagebox.showerror(title="错误", message="该应用安装包异常,无法查询相关数据!")
             return
         message = tk.Toplevel()
+        message.title("“{}“的Apk信息".format(GetApkChineseLabel(path)))
         message.iconphoto(False, tk.PhotoImage(file=iconPath))
         
         tab = ttk.Notebook(message)
@@ -705,11 +785,13 @@ class ApkInformation():
         # 获取图标
         SaveApkIcon(path, "/tmp/uengine-runner-android-app-icon.png")
         # 读取图标
+        global image
         image = Image.open("/tmp/uengine-runner-android-app-icon.png")
         if image.size[0] + image.size[1] <= 512:
-            ttk.Label(tab1, image=ImageTk.PhotoImage(image)).pack()
+            ttk.Label(tab1, image=ImageTk.PhotoImage(Image.open("/tmp/uengine-runner-android-app-icon.png"))).pack()
         else:
-            ttk.Label(tab1, image=ImageTk.PhotoImage(image.resize((256, 256), Image.ANTIALIAS))).pack()
+            ttk.Label(tab1, image=ImageTk.PhotoImage(Image.open("/tmp/uengine-runner-android-app-icon.png").resize((256, 256), Image.ANTIALIAS))).pack()
+        image.close()
         info = '''包名:{}
 中文名:{}
 Activity:{}
@@ -1096,6 +1178,24 @@ if not os.path.exists(get_home() + "/.config/uengine-runner/SaveApkIcon.json"):
     write_txt(get_home() + "/.config/uengine-runner/SaveApkIcon.json", json.dumps({"path": "~"}))  # 写入(创建)一个配置文件
 if not os.path.exists(get_home() + "/.config/uengine-runner/SaveApk.json"):  # 如果没有配置文件
     write_txt(get_home() + "/.config/uengine-runner/SaveApk.json", json.dumps({"path": "~"}))  # 写入(创建)一个配置文件
+if not os.path.exists(get_home() + "/.config/uengine-runner/setting.json"):
+    choose = None
+    choose = easygui.indexbox(msg="""在使用本程序前,请选择安装Apk包的设置以便更好的运行,下列选项的详细介绍:
+
+不备份Apk包直接安装:适用于Deepin(旧版UEngine),安装较快,不受/tmp大小所限,但Deepin23和UOS(新版UEngine)不推荐此选项,因为安装后会自动删除Apk安装包;
+备份Apk包然后在安装后自动拷贝原先目录:适用于Deepin23和UOS(新版UEngine),安装较慢,受/tmp大小所限,安装后不会丢失Apk,Deepin(旧版UEngine)不推荐使用该选项;
+
+
+后期可以在程序主界面的菜单栏的“程序”=>“设置”里进行修改,
+如果不知道正在使用的系统是什么版本可以打开系统设置查看。
+""", title="设置", choices=["不备份Apk包直接安装", "备份Apk包然后在安装后自动拷贝原先目录"])
+    if choose == None:
+        root = tk.Tk()
+        root.withdraw()
+        messagebox.showinfo(title="提示", message="必须选择一个选项!否则无法进入程序!")
+        sys.exit()            
+    write_txt(get_home() + "/.config/uengine-runner/setting.json", json.dumps({"SaveApk": int(choose)}))
+
 
 ###########################
 # 设置变量
@@ -1219,7 +1319,7 @@ def showhelp():
 ###########################
 # 窗口创建
 ###########################
-win = tk.Tk()  # 创建窗口
+
 
 # 设置窗口
 style = ttkthemes.ThemedStyle(win)
@@ -1275,6 +1375,7 @@ menu.add_cascade(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Name"],
 menu.add_cascade(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Name"], menu=help)
 
 programmenu.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][0]["Menu"][0], command=CleanProgramHistory)
+programmenu.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][0]["Menu"][2], command=SettingWindow.ShowWindow)
 programmenu.add_separator()  # 设置分界线
 programmenu.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][0]["Menu"][1], command=window.quit)  # 设置“退出程序”
 
@@ -1308,8 +1409,9 @@ uengine.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"
 uengine.add_cascade(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][11]["Name"], menu=uengineRoot)
 
 help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][0], command=OpenProgramURL)  # 设置“程序官网”项
-help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][2], command=UengineRunnerBugUpload)  # 设置“程序官网”项
-help.add_command(label="检查更新", command=UpdateWindow.ShowWindow)
+help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][2], command=UengineRunnerBugUpload)  # 设置“传bug”项
+help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][4], command=ShowHelp)  # 设置“更多帮助”项
+help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][3], command=UpdateWindow.ShowWindow)
 help.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][1], command=showhelp)  # 设置“关于这个程序”项
 
 uengineService.add_command(label=langFile[lang]["Main"]["MainWindow"]["Menu"][2]["Menu"][2]["Menu"][0], command=StartUengine)