Fixed HTML

This commit is contained in:
Bruce
2025-03-02 22:26:40 +08:00
parent 151c63c9c2
commit 99df99dd9f
8 changed files with 287 additions and 45 deletions

View File

@@ -241,9 +241,12 @@ BEGIN
APPLIST_WINTITLE "应用选择列表" APPLIST_WINTITLE "应用选择列表"
APPLIST_TITLE "你要从哪个应用开始?" APPLIST_TITLE "你要从哪个应用开始?"
APPLIST_BUTTON_CANCEL "取消" APPLIST_BUTTON_CANCEL "取消"
SHORTCUT_SETTINGS "设置"
SHORTCUT_UNINSTALL "删除 应用安装程序"
SHORTCUT_UPDATE "更新 App Installer"
CLHELP_1 "命令行参数说明:\n\n" CLHELP_1 "命令行参数说明:\n\n"
CLHELP_2 "\t/?, /Help\n\t显示帮助窗口 (命令行参数说明)\n\n" CLHELP_2 "\t/?, /Help\n\t显示帮助窗口 (命令行参数说明)\n\n"
CLHELP_3 "\t/DisableFrame\n\t禁止使用自绘的窗口边框\n\n" CLHELP_3 "\t/DisableFrame\n\t禁止使用自绘的窗口边框 (仅用于易程序)\n\n"
CLHELP_4 "\t/Win32Window\n\t不使用 WebUI改用 Win32 窗口\n\n" CLHELP_4 "\t/Win32Window\n\t不使用 WebUI改用 Win32 窗口\n\n"
CLHELP_5 "\t/Silent\n\t一般情况下会自动安装安装完成后在几秒后结束\n\n" CLHELP_5 "\t/Silent\n\t一般情况下会自动安装安装完成后在几秒后结束\n\n"
CLHELP_6 "\t/VerySilent\n\t静默安装安装时不会显示任何信息安装任务完成后自动结束\n\n" CLHELP_6 "\t/VerySilent\n\t静默安装安装时不会显示任何信息安装任务完成后自动结束\n\n"
@@ -269,6 +272,9 @@ END
STRINGTABLE STRINGTABLE
BEGIN BEGIN
CLHELP_7 "\t/NoGUI\n\t使用 WSAppPkgIns 安装。安装时会弹出命令行窗口,安装完成后需手动关闭窗口\n\n" CLHELP_7 "\t/NoGUI\n\t使用 WSAppPkgIns 安装。安装时会弹出命令行窗口,安装完成后需手动关闭窗口\n\n"
CLHELP_8 "\t/EnableFrame\n\t使用自绘的窗口边框 (仅用于易程序)\n\n"
CLHELP_9 "\t/EProgram\n\t使用易的 WebUI\n\n"
CLHELP_10 "\t/Console\n\t使用命令行版的 应用安装程序 (其实建议直接使用 AppInstallerConsole.exe 才更方便看输入输出)\n\n"
END END
STRINGTABLE STRINGTABLE
@@ -409,9 +415,12 @@ BEGIN
APPLIST_WINTITLE "App Select List" APPLIST_WINTITLE "App Select List"
APPLIST_TITLE "Which app do you want to start with?" APPLIST_TITLE "Which app do you want to start with?"
APPLIST_BUTTON_CANCEL "Cancel" APPLIST_BUTTON_CANCEL "Cancel"
SHORTCUT_SETTINGS "Settings"
SHORTCUT_UNINSTALL "Delete App Installer"
SHORTCUT_UPDATE "Update App Installer"
CLHELP_1 "Usage:\n\n" CLHELP_1 "Usage:\n\n"
CLHELP_2 "\t/?, /Help\n\tDisplay help window (command line parameter description).\n\n" CLHELP_2 "\t/?, /Help\n\tDisplay help window (command line parameter description).\n\n"
CLHELP_3 "\t/DisableFrame\n\tDisable the use of self-drawn window borders.\n\n" CLHELP_3 "\t/DisableFrame\n\tDisable the use of self-drawn window borders. (Only use for E program.)\n\n"
CLHELP_4 "\t/Win32Window\n\tDo not use WebUI, use Win32 window instead.\n\n" CLHELP_4 "\t/Win32Window\n\tDo not use WebUI, use Win32 window instead.\n\n"
CLHELP_5 "\t/Silent\n\tUnder normal circumstances, it will be automatically installed and will end after a few seconds.\n\n" CLHELP_5 "\t/Silent\n\tUnder normal circumstances, it will be automatically installed and will end after a few seconds.\n\n"
CLHELP_6 "\t/VerySilent\n\tSilent installation, no information will be displayed during installation, and the installation task will automatically end after completion.\n\n" CLHELP_6 "\t/VerySilent\n\tSilent installation, no information will be displayed during installation, and the installation task will automatically end after completion.\n\n"
@@ -429,6 +438,9 @@ END
STRINGTABLE STRINGTABLE
BEGIN BEGIN
CLHELP_7 "\t/NoGUI\n\tUse WSAppPkgIns to install. A command line window will pop up during installation, and you need to manually close the window after installation.\n\n" CLHELP_7 "\t/NoGUI\n\tUse WSAppPkgIns to install. A command line window will pop up during installation, and you need to manually close the window after installation.\n\n"
CLHELP_8 "\t/EnableFrame\n\tEnable the use of self-drawn window borders. (Only use for E program.)\n\n"
CLHELP_9 "\t/EProgram\n\tUse E WebUI program.\n\n"
CLHELP_10 "\t/Console\n\tUse the command line version of the application installer (it is actually recommended to use AppInstallerConsole.exe directly for easier viewing of input and output)\n\n"
END END
STRINGTABLE STRINGTABLE

View File

@@ -142,6 +142,7 @@
<AdditionalManifestFiles>app.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles> <AdditionalManifestFiles>app.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
<InputResourceManifests> <InputResourceManifests>
</InputResourceManifests> </InputResourceManifests>
<EnableDpiAwareness>false</EnableDpiAwareness>
</Manifest> </Manifest>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">

View File

@@ -341,6 +341,7 @@ public ref class AppWindow: public Form
public: public:
AppWindow () AppWindow ()
{ {
this->Visible = false;
BOOL transitionsEnabled = FALSE; BOOL transitionsEnabled = FALSE;
HRESULT hr = DwmSetWindowAttribute ( HRESULT hr = DwmSetWindowAttribute (
reinterpret_cast <HWND> (this->Handle.ToPointer ()), reinterpret_cast <HWND> (this->Handle.ToPointer ()),
@@ -396,6 +397,7 @@ public ref class AppWindow: public Form
}); });
Thread ^thread = gcnew Thread (gcnew ThreadStart (this, &AppWindow::InvokeRefreshAppItems)); Thread ^thread = gcnew Thread (gcnew ThreadStart (this, &AppWindow::InvokeRefreshAppItems));
thread->Start (); thread->Start ();
this->Visible = true;
} }
void SendAppData (std::vector<appmap> apps) void SendAppData (std::vector<appmap> apps)
{ {
@@ -1169,14 +1171,25 @@ public ref class MainWnd: public Form
if (m_silentMode) if (m_silentMode)
{ {
// 在此版本中,在静默模式下打开无效的包后会自动关闭窗口结束程序。 // 在此版本中,在静默模式下打开无效的包后会自动关闭窗口结束程序。
while (!this->IsHandleCreated) {};
if (this->IsHandleCreated)
{
if (this->InvokeRequired)
{
this->Invoke (gcnew Action (this, &MainWnd::Close));
}
else
{
this->Close (); this->Close ();
} }
}
}
else else
{ {
invokeSetPage (1); invokeSetPage (1);
} }
} }
this->invokeSetDarkMode (IsAppInDarkMode ()); if (this->IsHandleCreated) this->invokeSetDarkMode (IsAppInDarkMode ());
EmptyWorkingSet ((HANDLE)-1); EmptyWorkingSet ((HANDLE)-1);
} }
void taskInstallPackage () void taskInstallPackage ()
@@ -1196,10 +1209,12 @@ public ref class MainWnd: public Form
invokeSetProgressText (rcString (PAGE_2_INSTALL)); invokeSetProgressText (rcString (PAGE_2_INSTALL));
InstallStatus status = AddPackageFromPath (pkgPath.c_str (), &ProgressCallback); InstallStatus status = AddPackageFromPath (pkgPath.c_str (), &ProgressCallback);
// MessageBeep (MB_OK); // MessageBeep (MB_OK);
std::wstring title (L"");
if (status == InstallStatus::Success) if (status == InstallStatus::Success)
{ {
invokeSetPage (4); invokeSetPage (4);
if (m_pkgInfo.applications.size () == 1 && !m_silentMode) this->eventOnPress_button1 (); // 用于启用 APP title = StrPrintFormatW (GetRCString_cpp (PAGE_4_TITLE).c_str (), m_pkgInfo.getPropertyName ().c_str ());
if (m_pkgInfo.applications.size () == 1 && !m_silentMode && this->invokeGetLaunchWhenReady ()) this->eventOnPress_button1 (); // 用于启用 APP
Thread ^closeThread = gcnew Thread (gcnew ThreadStart (this, &MainWnd::taskCountCancel)); Thread ^closeThread = gcnew Thread (gcnew ThreadStart (this, &MainWnd::taskCountCancel));
closeThread->IsBackground = true; closeThread->IsBackground = true;
closeThread->Start (); closeThread->Start ();
@@ -1207,6 +1222,7 @@ public ref class MainWnd: public Form
else else
{ {
invokeSetPage (5); invokeSetPage (5);
title = StrPrintFormatW (GetRCString_cpp (PAGE_5_TITLE).c_str (), m_pkgInfo.getPropertyName ().c_str ());
if (m_silentMode) if (m_silentMode)
{ {
Thread ^closeThread = gcnew Thread (gcnew ThreadStart (this, &MainWnd::taskCountCancel)); Thread ^closeThread = gcnew Thread (gcnew ThreadStart (this, &MainWnd::taskCountCancel));
@@ -1215,7 +1231,6 @@ public ref class MainWnd: public Form
} }
} }
this->invokeClearTaskbarProgress (); this->invokeClearTaskbarProgress ();
std::wstring title = StrPrintFormatW (GetRCString_cpp (PAGE_4_TITLE).c_str (), m_pkgInfo.getPropertyName ().c_str ());
std::wstring text (L""); std::wstring text (L"");
if (GetLastErrorDetailTextLength ()) text += GetLastErrorDetailText (); if (GetLastErrorDetailTextLength ()) text += GetLastErrorDetailText ();
bool res = CreateToastNotification (m_idenName, title.c_str (), text.c_str (), &ToastPressCallback, m_pkgInfo.getPropertyLogoIStream ()); bool res = CreateToastNotification (m_idenName, title.c_str (), text.c_str (), &ToastPressCallback, m_pkgInfo.getPropertyLogoIStream ());
@@ -1325,7 +1340,8 @@ std::vector <CMDARGUMENT> cmdargs =
{{L"", L"/", L"-"}, {L"CREATESHORTCUT", L"SHORTCUT", L"CREATELNK"}, {}, 8}, {{L"", L"/", L"-"}, {L"CREATESHORTCUT", L"SHORTCUT", L"CREATELNK"}, {}, 8},
{{L"", L"/", L"-"}, {L"DELETESHORTCUT", L"DELSHORTCUT", L"DELETELNK"}, {}, 9}, {{L"", L"/", L"-"}, {L"DELETESHORTCUT", L"DELSHORTCUT", L"DELETELNK"}, {}, 9},
{{L"", L"/", L"-"}, {L"DEVTOOL", L"DEVTOOLS", L"DEVMODE", L"DEVELOP"}, {}, 10}, {{L"", L"/", L"-"}, {L"DEVTOOL", L"DEVTOOLS", L"DEVMODE", L"DEVELOP"}, {}, 10},
{{L"", L"/", L"-"}, {L"USEEPROGRAM", L"EPROGRAM", L"ESUPPORT", L"USEE"}, {}, 11} {{L"", L"/", L"-"}, {L"USEEPROGRAM", L"EPROGRAM", L"ESUPPORT", L"USEE"}, {}, 11},
{{L"", L"/", L"-"}, {L"CONSOLE", L"CONSOLECLIENT"}, {}, 12},
}; };
// 编号为大于 0 的数,失败返回非正数 // 编号为大于 0 的数,失败返回非正数
@@ -1397,9 +1413,9 @@ bool ReadCommand (int argc, LPWSTR *argv)
{ {
std::vector <std::wstring> vecObjSwFiles; std::vector <std::wstring> vecObjSwFiles;
bool bWin32Wnd = false, bSilent = false, bVerySilent = false, bool bWin32Wnd = false, bSilent = false, bVerySilent = false,
bUseConsole = false, bUseNewFrame = false, bDisplayHelp = false, bUseCmd = false, bUseNewFrame = false, bDisplayHelp = false,
bCreateLnk = false, bDestroyLnk = false, bDevTool = false, bCreateLnk = false, bDestroyLnk = false, bDevTool = false,
bUseEProgream = false; bUseEProgream = false, bConsole = false;
for (size_t cnt = 0; cnt < (size_t)argc; cnt ++) for (size_t cnt = 0; cnt < (size_t)argc; cnt ++)
{ {
int res = GetCmdArgSerial (argv [cnt]); int res = GetCmdArgSerial (argv [cnt]);
@@ -1410,7 +1426,7 @@ bool ReadCommand (int argc, LPWSTR *argv)
case 1: bUseNewFrame = false; break; case 1: bUseNewFrame = false; break;
case 2: bSilent = true; break; case 2: bSilent = true; break;
case 3: bVerySilent = true; break; case 3: bVerySilent = true; break;
case 4: bUseConsole = true; break; case 4: bUseCmd = true; break;
case 5: bDisplayHelp = true; break; case 5: bDisplayHelp = true; break;
case 6: bUseNewFrame = true; break; case 6: bUseNewFrame = true; break;
case 7: bWin32Wnd = true; break; case 7: bWin32Wnd = true; break;
@@ -1418,6 +1434,7 @@ bool ReadCommand (int argc, LPWSTR *argv)
case 9: bDestroyLnk = true; break; case 9: bDestroyLnk = true; break;
case 10: bDevTool = true; break; case 10: bDevTool = true; break;
case 11: bUseEProgream = true; break; case 11: bUseEProgream = true; break;
case 12: bConsole = true; break;
} }
} }
else else
@@ -1433,9 +1450,14 @@ bool ReadCommand (int argc, LPWSTR *argv)
MessageBox::Show ( MessageBox::Show (
rcString (CLHELP_1) + rcString (CLHELP_1) +
rcString (CLHELP_2) + rcString (CLHELP_2) +
rcString (CLHELP_3) +
rcString (CLHELP_4) + rcString (CLHELP_4) +
rcString (CLHELP_5) + rcString (CLHELP_5) +
rcString (CLHELP_7) rcString (CLHELP_6) +
rcString (CLHELP_7) +
rcString (CLHELP_8) +
rcString (CLHELP_9) +
rcString (CLHELP_10)
); );
return false; return false;
} }
@@ -1459,6 +1481,12 @@ bool ReadCommand (int argc, LPWSTR *argv)
_itow (WIN_TITLE, resIdStr, 10); _itow (WIN_TITLE, resIdStr, 10);
desktop.writeUIntValue (L".ShellClassInfo", L"ConfirmFileOp", 0); desktop.writeUIntValue (L".ShellClassInfo", L"ConfirmFileOp", 0);
desktop.writeStringValue (L"LocalizedFileNames", L"App Installer.lnk", std::wstring (L"@") + path + L",-" + resIdStr); desktop.writeStringValue (L"LocalizedFileNames", L"App Installer.lnk", std::wstring (L"@") + path + L",-" + resIdStr);
_itow (SHORTCUT_SETTINGS, resIdStr, 10);
desktop.writeStringValue (L"LocalizedFileNames", L"Settings.lnk", std::wstring (L"@") + path + L",-" + resIdStr);
_itow (SHORTCUT_UNINSTALL, resIdStr, 10);
desktop.writeStringValue (L"LocalizedFileNames", L"Uninstaller.lnk", std::wstring (L"@") + path + L",-" + resIdStr);
_itow (SHORTCUT_UPDATE, resIdStr, 10);
desktop.writeStringValue (L"LocalizedFileNames", L"Update.lnk", std::wstring (L"@") + path + L",-" + resIdStr);
DWORD attrs = GetFileAttributesW (desktopIni); DWORD attrs = GetFileAttributesW (desktopIni);
SetFileAttributesW (desktopIni, attrs | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM); SetFileAttributesW (desktopIni, attrs | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM);
DWORD folderAttrs = GetFileAttributesW (expandedPath); DWORD folderAttrs = GetFileAttributesW (expandedPath);
@@ -1501,7 +1529,7 @@ bool ReadCommand (int argc, LPWSTR *argv)
else args += L"/DISABLEFRAME "; else args += L"/DISABLEFRAME ";
if (bSilent) args += L"/SILENT "; if (bSilent) args += L"/SILENT ";
if (bVerySilent) args += L"/VERYSILENT "; if (bVerySilent) args += L"/VERYSILENT ";
if (bUseConsole) args += L"/NOGUI "; if (bUseCmd) args += L"/NOGUI ";
if (bDisplayHelp) args += L"/? "; if (bDisplayHelp) args += L"/? ";
std::wstring cmdline = L"\"" + exepath + L"\" " + args; std::wstring cmdline = L"\"" + exepath + L"\" " + args;
{ {
@@ -1526,7 +1554,7 @@ bool ReadCommand (int argc, LPWSTR *argv)
else args += L"/DISABLEFRAME "; else args += L"/DISABLEFRAME ";
if (bSilent) args += L"/SILENT "; if (bSilent) args += L"/SILENT ";
if (bVerySilent) args += L"/VERYSILENT "; if (bVerySilent) args += L"/VERYSILENT ";
if (bUseConsole) args += L"/NOGUI "; if (bUseCmd) args += L"/NOGUI ";
if (bDisplayHelp) args += L"/? "; if (bDisplayHelp) args += L"/? ";
std::wstring cmdline = L"\"" + exepath + L"\" " + args; std::wstring cmdline = L"\"" + exepath + L"\" " + args;
{ {
@@ -1541,7 +1569,7 @@ bool ReadCommand (int argc, LPWSTR *argv)
} }
} }
} }
else if (bUseConsole) else if (bUseCmd)
{ {
std::wstring root = EnsureTrailingSlash (GetProgramRootDirectoryW ()); std::wstring root = EnsureTrailingSlash (GetProgramRootDirectoryW ());
std::wstring exepath = root + L"WSAppPkgIns.exe"; std::wstring exepath = root + L"WSAppPkgIns.exe";
@@ -1560,6 +1588,25 @@ bool ReadCommand (int argc, LPWSTR *argv)
} }
} }
} }
else if (bConsole)
{
std::wstring root = EnsureTrailingSlash (GetProgramRootDirectoryW ());
std::wstring exepath = root + L"AppInstallerConsole.exe";
std::wstring args = L"";
args += L"\"" + pkgPath + L"\" ";
std::wstring cmdline = L"\"" + exepath + L"\" " + args;
{
STARTUPINFOW si = {sizeof (STARTUPINFOW)};
PROCESS_INFORMATION pi = {0};
if (CreateProcessW (NULL, (LPWSTR)cmdline.c_str (), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
WaitForSingleObject (pi.hProcess, INFINITE);
CloseHandle (pi.hProcess);
CloseHandle (pi.hThread);
return false;
}
}
}
return true; return true;
} }
else if (vecObjSwFiles.size () <= 0) else if (vecObjSwFiles.size () <= 0)
@@ -1573,7 +1620,7 @@ bool ReadCommand (int argc, LPWSTR *argv)
else args += L"/DISABLEFRAME "; else args += L"/DISABLEFRAME ";
if (bSilent) args += L"/SILENT "; if (bSilent) args += L"/SILENT ";
if (bVerySilent) args += L"/VERYSILENT "; if (bVerySilent) args += L"/VERYSILENT ";
if (bUseConsole) args += L"/NOGUI "; if (bUseCmd) args += L"/NOGUI ";
if (bDisplayHelp) args += L"/? "; if (bDisplayHelp) args += L"/? ";
std::wstring cmdline = L"\"" + exepath + L"\" " + args; std::wstring cmdline = L"\"" + exepath + L"\" " + args;
{ {
@@ -1597,7 +1644,7 @@ bool ReadCommand (int argc, LPWSTR *argv)
else args += L"/DISABLEFRAME "; else args += L"/DISABLEFRAME ";
if (bSilent) args += L"/SILENT "; if (bSilent) args += L"/SILENT ";
if (bVerySilent) args += L"/VERYSILENT "; if (bVerySilent) args += L"/VERYSILENT ";
if (bUseConsole) args += L"/NOGUI "; if (bUseCmd) args += L"/NOGUI ";
if (bDisplayHelp) args += L"/? "; if (bDisplayHelp) args += L"/? ";
if (bDevTool) args += L"/DEVTOOL "; if (bDevTool) args += L"/DEVTOOL ";
std::wstring cmdline = L"\"" + exepath + L"\" " + args; std::wstring cmdline = L"\"" + exepath + L"\" " + args;
@@ -1613,9 +1660,33 @@ bool ReadCommand (int argc, LPWSTR *argv)
} }
} }
} }
else if (bUseCmd || bConsole) return false;
else return true; else return true;
} }
else if (vecObjSwFiles.size () > 1) // 面对多个文件 else if (vecObjSwFiles.size () > 1) // 面对多个文件
{
if (bConsole)
{
std::wstring root = EnsureTrailingSlash (GetProgramRootDirectoryW ());
std::wstring exepath = root + L"AppInstallerConsole.exe";
std::wstring args = L"";
for (auto it : vecObjSwFiles)
{
args += L" \"" + it + L"\"";
}
std::wstring cmdline = L"\"" + exepath + L"\"" + args;
{
STARTUPINFOW si = {sizeof (STARTUPINFOW)};
PROCESS_INFORMATION pi = {0};
if (CreateProcessW (NULL, (LPWSTR)cmdline.c_str (), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
WaitForSingleObject (pi.hProcess, INFINITE);
CloseHandle (pi.hProcess);
CloseHandle (pi.hThread);
}
}
}
else
{ {
for (auto it : vecObjSwFiles) for (auto it : vecObjSwFiles)
{ {
@@ -1628,7 +1699,7 @@ bool ReadCommand (int argc, LPWSTR *argv)
else args += L"/DISABLEFRAME "; else args += L"/DISABLEFRAME ";
if (bSilent) args += L"/SILENT "; if (bSilent) args += L"/SILENT ";
if (bVerySilent) args += L"/VERYSILENT "; if (bVerySilent) args += L"/VERYSILENT ";
if (bUseConsole) args += L"/NOGUI "; if (bUseCmd) args += L"/NOGUI ";
if (bDisplayHelp) args += L"/? "; if (bDisplayHelp) args += L"/? ";
if (bWin32Wnd) args += L"WIN32WINDOW "; if (bWin32Wnd) args += L"WIN32WINDOW ";
if (bUseEProgream) args += L"/USEEPROGRAM "; if (bUseEProgream) args += L"/USEEPROGRAM ";
@@ -1645,6 +1716,7 @@ bool ReadCommand (int argc, LPWSTR *argv)
} }
} }
} }
}
return false; return false;
} }
return false; return false;

View File

@@ -1142,6 +1142,9 @@
#define APPLIST_WINTITLE 324 #define APPLIST_WINTITLE 324
#define APPLIST_TITLE 325 #define APPLIST_TITLE 325
#define APPLIST_BUTTON_CANCEL 326 #define APPLIST_BUTTON_CANCEL 326
#define SHORTCUT_SETTINGS 327
#define SHORTCUT_UNINSTALL 328
#define SHORTCUT_UPDATE 329
#define CLHELP_1 330 #define CLHELP_1 330
#define CLHELP_2 331 #define CLHELP_2 331
#define CLHELP_3 332 #define CLHELP_3 332
@@ -1149,6 +1152,9 @@
#define CLHELP_5 334 #define CLHELP_5 334
#define CLHELP_6 335 #define CLHELP_6 335
#define CLHELP_7 336 #define CLHELP_7 336
#define CLHELP_8 337
#define CLHELP_9 338
#define CLHELP_10 339
#define INITWIDTH 400 #define INITWIDTH 400
#define INITHEIGHT 401 #define INITHEIGHT 401
#define LIMITWIDTH 402 #define LIMITWIDTH 402

View File

@@ -115,8 +115,8 @@ IDR_MANIFEST1 RT_MANIFEST "res/manifest.xml"
// //
IDR_VERSION_ZH_CN VERSIONINFO IDR_VERSION_ZH_CN VERSIONINFO
FILEVERSION 1,0,1,7 FILEVERSION 1,0,1,9
PRODUCTVERSION 1,0,1,7 PRODUCTVERSION 1,0,1,9
FILEFLAGSMASK 0x0L FILEFLAGSMASK 0x0L
#ifdef _DEBUG #ifdef _DEBUG
FILEFLAGS 0x1L FILEFLAGS 0x1L
@@ -133,9 +133,9 @@ BEGIN
BEGIN BEGIN
VALUE "CompanyName", "Bruce Winter" VALUE "CompanyName", "Bruce Winter"
VALUE "FileDescription", "应用安装程序" VALUE "FileDescription", "应用安装程序"
VALUE "FileVersion", "1.0.1.7" VALUE "FileVersion", "1.0.1.9"
VALUE "LegalCopyright", "\\xA9Bruce Winter. All rights reserved." VALUE "LegalCopyright", "\\xA9Bruce Winter. All rights reserved."
VALUE "ProductVersion", "1.0.1.7" VALUE "ProductVersion", "1.0.1.9"
END END
END END
BLOCK "VarFileInfo" BLOCK "VarFileInfo"
@@ -145,8 +145,8 @@ BEGIN
END END
IDR_VERSION_EN_US VERSIONINFO IDR_VERSION_EN_US VERSIONINFO
FILEVERSION 1,0,1,7 FILEVERSION 1,0,1,9
PRODUCTVERSION 1,0,1,7 PRODUCTVERSION 1,0,1,9
FILEFLAGSMASK 0x0L FILEFLAGSMASK 0x0L
#ifdef _DEBUG #ifdef _DEBUG
FILEFLAGS 0x1L FILEFLAGS 0x1L
@@ -163,9 +163,9 @@ BEGIN
BEGIN BEGIN
VALUE "CompanyName", "Bruce Winter" VALUE "CompanyName", "Bruce Winter"
VALUE "FileDescription", "App Installer" VALUE "FileDescription", "App Installer"
VALUE "FileVersion", "1.0.1.7" VALUE "FileVersion", "1.0.1.9"
VALUE "LegalCopyright", "\\xA9Bruce Winter. All rights reserved." VALUE "LegalCopyright", "\\xA9Bruce Winter. All rights reserved."
VALUE "ProductVersion", "1.0.1.7" VALUE "ProductVersion", "1.0.1.9"
END END
END END
BLOCK "VarFileInfo" BLOCK "VarFileInfo"

View File

@@ -166,6 +166,46 @@
<ItemGroup> <ItemGroup>
<ClCompile Include="main.cpp" /> <ClCompile Include="main.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Image Include="res\Button\Large\blank.png" />
<Image Include="res\Button\Large\blank_light.png" />
<Image Include="res\Button\Large\blank_press.png" />
<Image Include="res\Button\Large\cancel_window_light.png" />
<Image Include="res\Button\Large\cancel_window_normal.png" />
<Image Include="res\Button\Large\cancel_window_press.png" />
<Image Include="res\Button\Large\max_light.png" />
<Image Include="res\Button\Large\max_normal.png" />
<Image Include="res\Button\Large\max_press.png" />
<Image Include="res\Button\Large\min_light.png" />
<Image Include="res\Button\Large\min_normal.png" />
<Image Include="res\Button\Large\min_press.png" />
<Image Include="res\Button\Large\restore_light.png" />
<Image Include="res\Button\Large\restore_normal.png" />
<Image Include="res\Button\Large\restore_press.png" />
<Image Include="res\Button\Normal\blank.png" />
<Image Include="res\Button\Normal\blank_light.png" />
<Image Include="res\Button\Normal\blank_press.png" />
<Image Include="res\Button\Normal\cancel_back.png" />
<Image Include="res\Button\Normal\cancel_light.png" />
<Image Include="res\Button\Normal\cancel_press.png" />
<Image Include="res\Button\Normal\max_back.png" />
<Image Include="res\Button\Normal\max_light.png" />
<Image Include="res\Button\Normal\max_press.png" />
<Image Include="res\Button\Normal\min_back.png" />
<Image Include="res\Button\Normal\min_light.png" />
<Image Include="res\Button\Normal\min_press.png" />
<Image Include="res\Button\Normal\restore_back.png" />
<Image Include="res\Button\Normal\restore_light.png" />
<Image Include="res\Button\Normal\restore_press.png" />
<Image Include="res\Icons\FileIcon.ico" />
<Image Include="res\Icons\IconColor.ico" />
<Image Include="res\Icons\IconTitleBar.ico" />
<Image Include="res\Icons\IconWhite.ico" />
<Image Include="res\Icons\Main.ico" />
</ItemGroup>
<ItemGroup>
<Xml Include="res\manifest.xml" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">
</ImportGroup> </ImportGroup>

View File

@@ -47,4 +47,114 @@
<Filter>源文件</Filter> <Filter>源文件</Filter>
</ClCompile> </ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup>
<Image Include="res\Icons\Main.ico">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Icons\FileIcon.ico">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Icons\IconWhite.ico">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Icons\IconColor.ico">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Normal\blank.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Normal\blank_light.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Normal\blank_press.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Normal\min_back.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Normal\min_light.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Normal\min_press.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Normal\max_back.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Normal\max_light.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Normal\max_press.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Normal\restore_back.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Normal\restore_light.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Normal\restore_press.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Normal\cancel_back.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Normal\cancel_light.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Normal\cancel_press.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Large\blank.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Large\blank_light.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Large\blank_press.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Large\min_normal.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Large\min_light.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Large\min_press.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Large\max_normal.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Large\max_light.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Large\max_press.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Large\restore_normal.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Large\restore_light.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Large\restore_press.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Large\cancel_window_normal.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Large\cancel_window_light.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Button\Large\cancel_window_press.png">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\Icons\IconTitleBar.ico">
<Filter>资源文件</Filter>
</Image>
</ItemGroup>
<ItemGroup>
<Xml Include="res\manifest.xml" />
</ItemGroup>
</Project> </Project>

View File

@@ -516,6 +516,7 @@ void TaskInstallPackage ()
{ {
wcerr << "\rError: Install Failed. Message: Unavailable Package." << endl; wcerr << "\rError: Install Failed. Message: Unavailable Package." << endl;
} }
} }
void TaskInstallPackages (size_t serial, size_t total) void TaskInstallPackages (size_t serial, size_t total)