This commit is contained in:
Bruce
2025-12-09 20:36:40 +08:00
parent c0c39b9379
commit 5c18f75cb6
25 changed files with 2976 additions and 1716 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -1223,7 +1223,7 @@ public ref class MainHtmlWnd: public System::Windows::Forms::Form, public IScrip
{
try
{
const auto &pi = *g_pkginfo.begin ();
const auto &pi = g_pkginfo.at (0);
const std::wstring
&name = pi.identity.name,
&publisher = pi.identity.publisher,
@@ -1231,7 +1231,9 @@ public ref class MainHtmlWnd: public System::Windows::Forms::Form, public IScrip
&fullname = pi.identity.package_full_name;
std::vector <find_pkginfo> fpkgs;
std::wstring err, msg;
HRESULT hr = GetAppxPackages (family, fpkgs, err, msg);
HRESULT hr = S_OK;
if (g_initfile [L"Settings"] [L"AppInstaller:CheckPackageIsIntalled"].read_bool ())
hr = GetAppxPackages (family, fpkgs, err, msg);
bool isfind = false;
find_pkginfo findpkg;
if (fpkgs.size () > 0)

Binary file not shown.

Binary file not shown.

View File

@@ -687,7 +687,7 @@
<CustSCPath>%StartProgramsFolderCommon%\\%AppShortcutFolderName%</CustSCPath>
<SCDesc>Update</SCDesc>
<SCComment/>
<SCArgs>appinstaller update /autoupdate</SCArgs>
<SCArgs>appinstaller update /checkupdate</SCArgs>
<SCWork/>
<UseExtIco>0</UseExtIco>
<IcoFN/>
@@ -953,6 +953,152 @@
<CRC>0</CRC>
<StoreOnly>0</StoreOnly>
</FileData>
<FileData>
<FldRef>0</FldRef>
<FullName>E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\PriFileFormat.dll.config</FullName>
<FileName>PriFileFormat.dll.config</FileName>
<Source>E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release</Source>
<Ext>config</Ext>
<RTSource>档案</RTSource>
<Desc/>
<Recurse>1</Recurse>
<MatchMode>0</MatchMode>
<Dest>%AppFolder%</Dest>
<Overwrite>1</Overwrite>
<Backup>0</Backup>
<Protect>0</Protect>
<InstallOrder>1000</InstallOrder>
<SCStartRoot>0</SCStartRoot>
<SCStartProgs>0</SCStartProgs>
<SCAppFld>0</SCAppFld>
<SCStartup>0</SCStartup>
<SCDesk>0</SCDesk>
<SCQLaunch>0</SCQLaunch>
<SCStartPinOption>0</SCStartPinOption>
<SCCust>0</SCCust>
<CustSCPath/>
<SCDesc/>
<SCComment/>
<SCArgs/>
<SCWork/>
<UseExtIco>0</UseExtIco>
<IcoFN/>
<IcoIdx>0</IcoIdx>
<IcoShowMd>0</IcoShowMd>
<IcoHK>0</IcoHK>
<RegTTF>0</RegTTF>
<TTFName/>
<RegOCX>0</RegOCX>
<RegTLB>0</RegTLB>
<SupInUse>0</SupInUse>
<Compress>1</Compress>
<UseOrigAttr>1</UseOrigAttr>
<Attr>0</Attr>
<NoCRC>0</NoCRC>
<NoRemove>0</NoRemove>
<Shared>0</Shared>
<OSCond>
<OS>32768</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
</OSCond>
<RTCond/>
<BuildConfigs>
<Cfg>All</Cfg>
</BuildConfigs>
<Package>None</Package>
<Packages/>
<Notes/>
<CompSize>0</CompSize>
<CRC>0</CRC>
<StoreOnly>0</StoreOnly>
</FileData>
<FileData>
<FldRef>0</FldRef>
<FullName>E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\priformatcli.dll.metagen</FullName>
<FileName>priformatcli.dll.metagen</FileName>
<Source>E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release</Source>
<Ext>metagen</Ext>
<RTSource>档案</RTSource>
<Desc/>
<Recurse>1</Recurse>
<MatchMode>0</MatchMode>
<Dest>%AppFolder%</Dest>
<Overwrite>1</Overwrite>
<Backup>0</Backup>
<Protect>0</Protect>
<InstallOrder>1000</InstallOrder>
<SCStartRoot>0</SCStartRoot>
<SCStartProgs>0</SCStartProgs>
<SCAppFld>0</SCAppFld>
<SCStartup>0</SCStartup>
<SCDesk>0</SCDesk>
<SCQLaunch>0</SCQLaunch>
<SCStartPinOption>0</SCStartPinOption>
<SCCust>0</SCCust>
<CustSCPath/>
<SCDesc/>
<SCComment/>
<SCArgs/>
<SCWork/>
<UseExtIco>0</UseExtIco>
<IcoFN/>
<IcoIdx>0</IcoIdx>
<IcoShowMd>0</IcoShowMd>
<IcoHK>0</IcoHK>
<RegTTF>0</RegTTF>
<TTFName/>
<RegOCX>0</RegOCX>
<RegTLB>0</RegTLB>
<SupInUse>0</SupInUse>
<Compress>1</Compress>
<UseOrigAttr>1</UseOrigAttr>
<Attr>0</Attr>
<NoCRC>0</NoCRC>
<NoRemove>0</NoRemove>
<Shared>0</Shared>
<OSCond>
<OS>32768</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
</OSCond>
<RTCond/>
<BuildConfigs>
<Cfg>All</Cfg>
</BuildConfigs>
<Package>None</Package>
<Packages/>
<Notes/>
<CompSize>0</CompSize>
<CRC>0</CRC>
<StoreOnly>0</StoreOnly>
</FileData>
</ArchiveFiles>
<ExternalFiles/>
<BeforeInstallingScreens>
@@ -2119,7 +2265,7 @@ end
<Visible>1</Visible>
<Enabled>1</Enabled>
<TabOrder>0</TabOrder>
<IsHTML>0</IsHTML>
<IsHTML>1</IsHTML>
<TextAlign>0</TextAlign>
<VertScroll>1</VertScroll>
<HorizScroll>0</HorizScroll>
@@ -2180,7 +2326,95 @@ end
<IDS_CTRL_BUTTON_BACK>&lt; &amp;Back</IDS_CTRL_BUTTON_BACK>
<IDS_CTRL_BUTTON_CANCEL>&amp;Cancel</IDS_CTRL_BUTTON_CANCEL>
<IDS_CTRL_BUTTON_HELP>&amp;Help</IDS_CTRL_BUTTON_HELP>
<IDS_CTRL_SCROLLTEXT_BODY>Insert your license agreement text here...</IDS_CTRL_SCROLLTEXT_BODY>
<IDS_CTRL_SCROLLTEXT_BODY>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;title&gt;End User License Agreement (EULA)&lt;/title&gt;
&lt;style&gt;
body {
/*font-family: "Segoe UI", "Microsoft YaHei", Arial, sans-serif;*/
font-size: 9pt;
/*color: #333333;
background-color: #ffffff;*/
}
h1 {
font-size: 12.5pt;
font-weight: bold;
margin-bottom: 5px;
text-align: center;
}
h2 {
font-size: 10.75pt;
font-weight: bold;
margin-top: 5px;
margin-bottom: 5px;
}
p {
margin: 5px 0;
}
ul,
ol {
margin: 5px 0;
padding: 0;
}
a {
color: #1a73e8;
text-decoration: underline;
}
a:hover {
color: #0b59d1;
text-decoration: none;
}
strong {
font-weight: bold;
}
em {
font-style: italic;
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;End User License Agreement (EULA)&lt;/h1&gt;
&lt;p&gt;Please read this license agreement carefully before installing or using this software.&lt;/p&gt;
&lt;h2&gt;1. Copyright&lt;/h2&gt;
&lt;p&gt;Copyright 漏 2025 Windows Modern. This software and its source code are protected by copyright law.&lt;/p&gt;
&lt;h2&gt;2. License&lt;/h2&gt;
&lt;p&gt;This software is licensed under the MIT License. You are free to use, copy, modify, and distribute this software and its source code, including for commercial purposes, subject to the terms of the MIT License.&lt;/p&gt;
&lt;h2&gt;3. Third-Party Components&lt;/h2&gt;
&lt;p&gt;This software includes the following third-party open source components, which are subject to their original licenses:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PriTools (Apache License 2.0) - &lt;a href="https://github.com/chausner/PriTools" target="_blank"&gt;https://github.com/chausner/PriTools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;pugixml (MIT License) - &lt;a href="https://pugixml.org/" target="_blank"&gt;https://pugixml.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;RapidJSON (MIT License) - &lt;a href="https://rapidjson.org/" target="_blank"&gt;https://rapidjson.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;WinJS (MIT License) - &lt;a href="https://github.com/winjs/winjs" target="_blank"&gt;https://github.com/winjs/winjs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;markdown.js (MIT License) - &lt;a href="https://github.com/evilstreak/markdown-js" target="_blank"&gt;https://github.com/evilstreak/markdown-js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;4. Disclaimer&lt;/h2&gt;
&lt;p&gt;This software is provided "as is", without any express or implied warranties, including but not limited to warranties of merchantability, fitness for a particular purpose, and non-infringement. In no event shall the authors or copyright holders be
liable for any damages arising from the use of this software, whether direct, indirect, incidental, or consequential.&lt;/p&gt;
&lt;h2&gt;5. Acceptance&lt;/h2&gt;
&lt;p&gt;By installing or using this software, you agree to this license agreement. If you do not agree, do not install or use the software.&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</IDS_CTRL_SCROLLTEXT_BODY>
<IDS_CTRL_RADIOBTN_AGREE>I agree to the terms of this license agreement</IDS_CTRL_RADIOBTN_AGREE>
<IDS_CTRL_RADIOBTN_DISAGREE>I do not agree to the terms of this license agreement</IDS_CTRL_RADIOBTN_DISAGREE>
<IDS_CTRL_SCROLLTEXT_FILE/>
@@ -2206,7 +2440,92 @@ end
<IDS_CTRL_BUTTON_BACK>&lt; 返回(&amp;B)</IDS_CTRL_BUTTON_BACK>
<IDS_CTRL_BUTTON_CANCEL>取消(&amp;C)</IDS_CTRL_BUTTON_CANCEL>
<IDS_CTRL_BUTTON_HELP>帮助(&amp;H)</IDS_CTRL_BUTTON_HELP>
<IDS_CTRL_SCROLLTEXT_BODY>在此插入您的许可协议文本...</IDS_CTRL_SCROLLTEXT_BODY>
<IDS_CTRL_SCROLLTEXT_BODY>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=GB2312"&gt;
&lt;title&gt;最终用户许可协议 (EULA)&lt;/title&gt;
&lt;style&gt;
body {
/*font-family: "Microsoft YaHei", "Segoe UI", Arial, sans-serif;*/
font-size: 9pt;
/*color: #333333;
background-color: #ffffff;*/
}
h1 {
font-size: 12.5pt;
font-weight: bold;
margin-bottom: 5px;
text-align: center;
}
h2 {
font-size: 10.75pt;
font-weight: bold;
margin-top: 5px;
margin-bottom: 5px;
}
p {
margin: 5px 0;
}
ul,
ol {
margin: 5px 0;
padding: 0;
}
a {
color: #1a73e8;
text-decoration: underline;
}
a:hover {
color: #0b59d1;
text-decoration: none;
}
strong {
font-weight: bold;
}
em {
font-style: italic;
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;最终用户许可协议 (EULA)&lt;/h1&gt;
&lt;p&gt;请在安装或使用本软件前仔细阅读本许可协议。&lt;/p&gt;
&lt;h2&gt;一、版权声明&lt;/h2&gt;
&lt;p&gt;Copyright &amp;#169; 2025 Windows Modern. 本软件及其源码受版权法保护。&lt;/p&gt;
&lt;h2&gt;二、许可范围&lt;/h2&gt;
&lt;p&gt;本软件遵循 MIT 许可协议。您可以在符合 MIT 许可条件下自由使用、复制、修改、分发本软件及其源码,包括商业用途。&lt;/p&gt;
&lt;h2&gt;三、第三方组件&lt;/h2&gt;
&lt;p&gt;本软件包含以下第三方开源组件,使用这些组件受其原始许可证约束:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PriTools (Apache License 2.0) - &lt;a href="https://github.com/chausner/PriTools" target="_blank"&gt;https://github.com/chausner/PriTools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;pugixml (MIT License) - &lt;a href="https://pugixml.org/" target="_blank"&gt;https://pugixml.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;RapidJSON (MIT License) - &lt;a href="https://rapidjson.org/" target="_blank"&gt;https://rapidjson.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;WinJS (MIT License) - &lt;a href="https://github.com/winjs/winjs" target="_blank"&gt;https://github.com/winjs/winjs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;markdown.js (MIT License) - &lt;a href="https://github.com/evilstreak/markdown-js" target="_blank"&gt;https://github.com/evilstreak/markdown-js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;四、免责声明&lt;/h2&gt;
&lt;p&gt;本软件按“原样”提供,不附带任何明示或暗示的担保,包括但不限于适销性、特定用途适用性和非侵权的保证。无论在何种情况下,作者或版权持有人均不对因使用本软件产生的任何直接、间接、偶然或特殊损害负责。&lt;/p&gt;
&lt;h2&gt;五、接受条款&lt;/h2&gt;
&lt;p&gt;安装或使用本软件即表示您接受本许可协议。如果您不同意本协议,请不要安装或使用本软件。&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;
</IDS_CTRL_SCROLLTEXT_BODY>
<IDS_CTRL_RADIOBTN_AGREE>我同意该许可协议的条款</IDS_CTRL_RADIOBTN_AGREE>
<IDS_CTRL_RADIOBTN_DISAGREE>我不同意该许可协议的条款</IDS_CTRL_RADIOBTN_DISAGREE>
<IDS_CTRL_SCROLLTEXT_FILE/>
@@ -4164,7 +4483,7 @@ function CreateShortcut(lnkpath, targetfile, appid)
return ret;
end
function SetDesktopInit(inipath, section, key, value)
ret = File.Run(SessionVar.Expand ("%AppFolder%\\desktopini.exe"), "\"" .. inipath .. "\" \"" .. section .. "\" \"" .. key .. "\" \"" .. value .. "\"", "", SW_SHOWNORMAL, true);
ret = File.Run(SessionVar.Expand ("%AppFolder%\\desktopini.exe"), "\"" .. inipath .. "\" \"" .. section .. "\" \"" .. key .. "\" \"" .. value .. "\"", "", SW_HIDE, true);
return ret;
end
startitemfolder = SessionVar.Expand ("%StartProgramsFolderCommon%\\%AppShortcutFolderName%");
@@ -4179,7 +4498,8 @@ SetDesktopInit (desktopini, ".ShellClassInfo", "ConfirmFileOp", 0);
SetDesktopInit (desktopini, "LocalizedFileNames", "App Installer.lnk", SessionVar.Expand("@%AppFolder%\\appinstaller.exe,-300"));
SetDesktopInit (desktopini, "LocalizedFileNames", "Settings.lnk", SessionVar.Expand("@%AppFolder%\\settings.exe,-200"));
SetDesktopInit (desktopini, "LocalizedFileNames", "Update.lnk", SessionVar.Expand("@%AppFolder%\\reslib.dll,-103"));
SetDesktopInit (desktopini, "LocalizedFileNames", "Uninstaller.lnk", SessionVar.Expand("@%AppFolder%\\reslib.dll,-131"));
SetDesktopInit (desktopini, "LocalizedFileNames", "Uninstall.lnk", SessionVar.Expand("@%AppFolder%\\reslib.dll,-131"));
SetDesktopInit (desktopini, ".ShellClassInfo", "LocalizedResourceName", SessionVar.Expand("@%AppFolder%\\appinstaller.exe,-300"));
DlgScrollingText.AppendLine(CTRL_SCROLLTEXT_BODY, "Updating system PATH...");
local appFolder = SessionVar.Expand("%AppFolder%");
@@ -6181,7 +6501,7 @@ g_HandleSystemReboot();
</SessionVar>
<SessionVar>
<Name>%ProductVer%</Name>
<Value>0.1.0.0</Value>
<Value>0.2.0.0</Value>
<Type>1</Type>
</SessionVar>
<SessionVar>

View File

@@ -687,7 +687,7 @@
<CustSCPath>%StartProgramsFolderCommon%\\%AppShortcutFolderName%</CustSCPath>
<SCDesc>Update</SCDesc>
<SCComment/>
<SCArgs>appinstaller update /autoupdate</SCArgs>
<SCArgs>appinstaller update /checkupdate</SCArgs>
<SCWork/>
<UseExtIco>0</UseExtIco>
<IcoFN/>
@@ -953,6 +953,152 @@
<CRC>0</CRC>
<StoreOnly>0</StoreOnly>
</FileData>
<FileData>
<FldRef>0</FldRef>
<FullName>E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\PriFileFormat.dll.config</FullName>
<FileName>PriFileFormat.dll.config</FileName>
<Source>E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release</Source>
<Ext>config</Ext>
<RTSource>档案</RTSource>
<Desc/>
<Recurse>1</Recurse>
<MatchMode>0</MatchMode>
<Dest>%AppFolder%</Dest>
<Overwrite>1</Overwrite>
<Backup>0</Backup>
<Protect>0</Protect>
<InstallOrder>1000</InstallOrder>
<SCStartRoot>0</SCStartRoot>
<SCStartProgs>0</SCStartProgs>
<SCAppFld>0</SCAppFld>
<SCStartup>0</SCStartup>
<SCDesk>0</SCDesk>
<SCQLaunch>0</SCQLaunch>
<SCStartPinOption>0</SCStartPinOption>
<SCCust>0</SCCust>
<CustSCPath/>
<SCDesc/>
<SCComment/>
<SCArgs/>
<SCWork/>
<UseExtIco>0</UseExtIco>
<IcoFN/>
<IcoIdx>0</IcoIdx>
<IcoShowMd>0</IcoShowMd>
<IcoHK>0</IcoHK>
<RegTTF>0</RegTTF>
<TTFName/>
<RegOCX>0</RegOCX>
<RegTLB>0</RegTLB>
<SupInUse>0</SupInUse>
<Compress>1</Compress>
<UseOrigAttr>1</UseOrigAttr>
<Attr>0</Attr>
<NoCRC>0</NoCRC>
<NoRemove>0</NoRemove>
<Shared>0</Shared>
<OSCond>
<OS>32768</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
</OSCond>
<RTCond/>
<BuildConfigs>
<Cfg>All</Cfg>
</BuildConfigs>
<Package>None</Package>
<Packages/>
<Notes/>
<CompSize>0</CompSize>
<CRC>0</CRC>
<StoreOnly>0</StoreOnly>
</FileData>
<FileData>
<FldRef>0</FldRef>
<FullName>E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\priformatcli.dll.metagen</FullName>
<FileName>priformatcli.dll.metagen</FileName>
<Source>E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release</Source>
<Ext>metagen</Ext>
<RTSource>档案</RTSource>
<Desc/>
<Recurse>1</Recurse>
<MatchMode>0</MatchMode>
<Dest>%AppFolder%</Dest>
<Overwrite>1</Overwrite>
<Backup>0</Backup>
<Protect>0</Protect>
<InstallOrder>1000</InstallOrder>
<SCStartRoot>0</SCStartRoot>
<SCStartProgs>0</SCStartProgs>
<SCAppFld>0</SCAppFld>
<SCStartup>0</SCStartup>
<SCDesk>0</SCDesk>
<SCQLaunch>0</SCQLaunch>
<SCStartPinOption>0</SCStartPinOption>
<SCCust>0</SCCust>
<CustSCPath/>
<SCDesc/>
<SCComment/>
<SCArgs/>
<SCWork/>
<UseExtIco>0</UseExtIco>
<IcoFN/>
<IcoIdx>0</IcoIdx>
<IcoShowMd>0</IcoShowMd>
<IcoHK>0</IcoHK>
<RegTTF>0</RegTTF>
<TTFName/>
<RegOCX>0</RegOCX>
<RegTLB>0</RegTLB>
<SupInUse>0</SupInUse>
<Compress>1</Compress>
<UseOrigAttr>1</UseOrigAttr>
<Attr>0</Attr>
<NoCRC>0</NoCRC>
<NoRemove>0</NoRemove>
<Shared>0</Shared>
<OSCond>
<OS>32768</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
<OS>65535</OS>
</OSCond>
<RTCond/>
<BuildConfigs>
<Cfg>All</Cfg>
</BuildConfigs>
<Package>None</Package>
<Packages/>
<Notes/>
<CompSize>0</CompSize>
<CRC>0</CRC>
<StoreOnly>0</StoreOnly>
</FileData>
</ArchiveFiles>
<ExternalFiles/>
<BeforeInstallingScreens>
@@ -2119,7 +2265,7 @@ end
<Visible>1</Visible>
<Enabled>1</Enabled>
<TabOrder>0</TabOrder>
<IsHTML>0</IsHTML>
<IsHTML>1</IsHTML>
<TextAlign>0</TextAlign>
<VertScroll>1</VertScroll>
<HorizScroll>0</HorizScroll>
@@ -2180,7 +2326,97 @@ end
<IDS_CTRL_BUTTON_BACK>&lt; &amp;Back</IDS_CTRL_BUTTON_BACK>
<IDS_CTRL_BUTTON_CANCEL>&amp;Cancel</IDS_CTRL_BUTTON_CANCEL>
<IDS_CTRL_BUTTON_HELP>&amp;Help</IDS_CTRL_BUTTON_HELP>
<IDS_CTRL_SCROLLTEXT_BODY>Insert your license agreement text here...</IDS_CTRL_SCROLLTEXT_BODY>
<IDS_CTRL_SCROLLTEXT_BODY>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;title&gt;End User License Agreement&lt;/title&gt;
&lt;style&gt;
body {
/*font-family: "Segoe UI", "Microsoft YaHei", Arial, sans-serif;*/
font-size: 9pt;
/*color: #333333;
background-color: #ffffff;*/
-ms-overflow-style: -ms-autohiding-scrollbar;
box-sizing: border-box;
}
h1 {
font-size: 12.5pt;
font-weight: bold;
margin-bottom: 5px;
text-align: center;
}
h2 {
font-size: 10.75pt;
font-weight: bold;
margin-top: 5px;
margin-bottom: 5px;
}
p {
margin: 5px 0;
}
ul,
ol {
margin: 5px 0;
padding: 0;
}
a {
color: #1a73e8;
text-decoration: underline;
}
a:hover {
color: #0b59d1;
text-decoration: none;
}
strong {
font-weight: bold;
}
em {
font-style: italic;
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;End User License Agreement&lt;/h1&gt;
&lt;p&gt;Please read this license agreement carefully before installing or using this software.&lt;/p&gt;
&lt;h2&gt;1. Copyright&lt;/h2&gt;
&lt;p&gt;Copyright 漏 2025 Windows Modern. This software and its source code are protected by copyright law.&lt;/p&gt;
&lt;h2&gt;2. License&lt;/h2&gt;
&lt;p&gt;This software is licensed under the MIT License. You are free to use, copy, modify, and distribute this software and its source code, including for commercial purposes, subject to the terms of the MIT License.&lt;/p&gt;
&lt;h2&gt;3. Third-Party Components&lt;/h2&gt;
&lt;p&gt;This software includes the following third-party open source components, which are subject to their original licenses:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PriTools (Apache License 2.0) - &lt;a href="https://github.com/chausner/PriTools" target="_blank"&gt;https://github.com/chausner/PriTools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;pugixml (MIT License) - &lt;a href="https://pugixml.org/" target="_blank"&gt;https://pugixml.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;RapidJSON (MIT License) - &lt;a href="https://rapidjson.org/" target="_blank"&gt;https://rapidjson.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;WinJS (MIT License) - &lt;a href="https://github.com/winjs/winjs" target="_blank"&gt;https://github.com/winjs/winjs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;markdown.js (MIT License) - &lt;a href="https://github.com/evilstreak/markdown-js" target="_blank"&gt;https://github.com/evilstreak/markdown-js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;4. Disclaimer&lt;/h2&gt;
&lt;p&gt;This software is provided "as is", without any express or implied warranties, including but not limited to warranties of merchantability, fitness for a particular purpose, and non-infringement. In no event shall the authors or copyright holders be
liable for any damages arising from the use of this software, whether direct, indirect, incidental, or consequential.&lt;/p&gt;
&lt;h2&gt;5. Acceptance&lt;/h2&gt;
&lt;p&gt;By installing or using this software, you agree to this license agreement. If you do not agree, do not install or use the software.&lt;/p&gt;
&lt;br&gt;
&lt;/body&gt;
&lt;/html&gt;</IDS_CTRL_SCROLLTEXT_BODY>
<IDS_CTRL_RADIOBTN_AGREE>I agree to the terms of this license agreement</IDS_CTRL_RADIOBTN_AGREE>
<IDS_CTRL_RADIOBTN_DISAGREE>I do not agree to the terms of this license agreement</IDS_CTRL_RADIOBTN_DISAGREE>
<IDS_CTRL_SCROLLTEXT_FILE/>
@@ -2206,7 +2442,94 @@ end
<IDS_CTRL_BUTTON_BACK>&lt; 返回(&amp;B)</IDS_CTRL_BUTTON_BACK>
<IDS_CTRL_BUTTON_CANCEL>取消(&amp;C)</IDS_CTRL_BUTTON_CANCEL>
<IDS_CTRL_BUTTON_HELP>帮助(&amp;H)</IDS_CTRL_BUTTON_HELP>
<IDS_CTRL_SCROLLTEXT_BODY>在此插入您的许可协议文本...</IDS_CTRL_SCROLLTEXT_BODY>
<IDS_CTRL_SCROLLTEXT_BODY>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=GB2312"&gt;
&lt;title&gt;最终用户许可协议&lt;/title&gt;
&lt;style&gt;
body {
/*font-family: "Microsoft YaHei", "Segoe UI", Arial, sans-serif;*/
font-size: 9pt;
/*color: #333333;
background-color: #ffffff;*/
-ms-overflow-style: -ms-autohiding-scrollbar;
box-sizing: border-box;
}
h1 {
font-size: 12.5pt;
font-weight: bold;
margin-bottom: 5px;
text-align: center;
}
h2 {
font-size: 10.75pt;
font-weight: bold;
margin-top: 5px;
margin-bottom: 5px;
}
p {
margin: 5px 0;
}
ul,
ol {
margin: 5px 0;
padding: 0;
}
a {
color: #1a73e8;
text-decoration: underline;
}
a:hover {
color: #0b59d1;
text-decoration: none;
}
strong {
font-weight: bold;
}
em {
font-style: italic;
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;最终用户许可协议&lt;/h1&gt;
&lt;p&gt;请在安装或使用本软件前仔细阅读本许可协议。&lt;/p&gt;
&lt;h2&gt;一、版权声明&lt;/h2&gt;
&lt;p&gt;Copyright &amp;#169; 2025 Windows Modern. 本软件及其源码受版权法保护。&lt;/p&gt;
&lt;h2&gt;二、许可范围&lt;/h2&gt;
&lt;p&gt;本软件遵循 MIT 许可协议。您可以在符合 MIT 许可条件下自由使用、复制、修改、分发本软件及其源码,包括商业用途。&lt;/p&gt;
&lt;h2&gt;三、第三方组件&lt;/h2&gt;
&lt;p&gt;本软件包含以下第三方开源组件,使用这些组件受其原始许可证约束:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PriTools (Apache License 2.0) - &lt;a href="https://github.com/chausner/PriTools" target="_blank"&gt;https://github.com/chausner/PriTools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;pugixml (MIT License) - &lt;a href="https://pugixml.org/" target="_blank"&gt;https://pugixml.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;RapidJSON (MIT License) - &lt;a href="https://rapidjson.org/" target="_blank"&gt;https://rapidjson.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;WinJS (MIT License) - &lt;a href="https://github.com/winjs/winjs" target="_blank"&gt;https://github.com/winjs/winjs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;markdown.js (MIT License) - &lt;a href="https://github.com/evilstreak/markdown-js" target="_blank"&gt;https://github.com/evilstreak/markdown-js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;四、免责声明&lt;/h2&gt;
&lt;p&gt;本软件按“原样”提供,不附带任何明示或暗示的担保,包括但不限于适销性、特定用途适用性和非侵权的保证。无论在何种情况下,作者或版权持有人均不对因使用本软件产生的任何直接、间接、偶然或特殊损害负责。&lt;/p&gt;
&lt;h2&gt;五、接受条款&lt;/h2&gt;
&lt;p&gt;安装或使用本软件即表示您接受本许可协议。如果您不同意本协议,请不要安装或使用本软件。&lt;/p&gt;
&lt;br&gt;
&lt;/body&gt;
&lt;/html&gt;
</IDS_CTRL_SCROLLTEXT_BODY>
<IDS_CTRL_RADIOBTN_AGREE>我同意该许可协议的条款</IDS_CTRL_RADIOBTN_AGREE>
<IDS_CTRL_RADIOBTN_DISAGREE>我不同意该许可协议的条款</IDS_CTRL_RADIOBTN_DISAGREE>
<IDS_CTRL_SCROLLTEXT_FILE/>
@@ -4164,13 +4487,13 @@ function CreateShortcut(lnkpath, targetfile, appid)
return ret;
end
function SetDesktopInit(inipath, section, key, value)
ret = File.Run(SessionVar.Expand ("%AppFolder%\\desktopini.exe"), "\"" .. inipath .. "\" \"" .. section .. "\" \"" .. key .. "\" \"" .. value .. "\"", "", SW_SHOWNORMAL, true);
ret = File.Run(SessionVar.Expand ("%AppFolder%\\desktopini.exe"), "\"" .. inipath .. "\" \"" .. section .. "\" \"" .. key .. "\" \"" .. value .. "\"", "", SW_HIDE, true);
return ret;
end
startitemfolder = SessionVar.Expand ("%StartProgramsFolderCommon%\\%AppShortcutFolderName%");
applnkpath = startitemfolder .. "\\App Installer.lnk";
setlnkpath = startitemfolder .. "\\Settings.lnk";
desktopini = startitemfolder .. "\\desktop.ini";
desktopini = startitemfolder .. "";
CreateShortcut (applnkpath, SessionVar.Expand("%AppFolder%\\appinstaller.exe"), "Microsoft.DesktopAppInstaller!App");
Registry.SetValue(HKEY_CURRENT_USER, "SOFTWARE\\Windows Modern\\App Installer", "AppInstallerLnk", applnkpath, REG_SZ);
CreateShortcut (setlnkpath, SessionVar.Expand("%AppFolder%\\settings.exe"), "WindowsModern.PracticalToolsProject!Settings");
@@ -4179,7 +4502,8 @@ SetDesktopInit (desktopini, ".ShellClassInfo", "ConfirmFileOp", 0);
SetDesktopInit (desktopini, "LocalizedFileNames", "App Installer.lnk", SessionVar.Expand("@%AppFolder%\\appinstaller.exe,-300"));
SetDesktopInit (desktopini, "LocalizedFileNames", "Settings.lnk", SessionVar.Expand("@%AppFolder%\\settings.exe,-200"));
SetDesktopInit (desktopini, "LocalizedFileNames", "Update.lnk", SessionVar.Expand("@%AppFolder%\\reslib.dll,-103"));
SetDesktopInit (desktopini, "LocalizedFileNames", "Uninstaller.lnk", SessionVar.Expand("@%AppFolder%\\reslib.dll,-131"));
SetDesktopInit (desktopini, "LocalizedFileNames", "Uninstall.lnk", SessionVar.Expand("@%AppFolder%\\reslib.dll,-131"));
SetDesktopInit (desktopini, ".ShellClassInfo", "LocalizedResourceName", SessionVar.Expand("@%AppFolder%\\appinstaller.exe,-300"));
DlgScrollingText.AppendLine(CTRL_SCROLLTEXT_BODY, "Updating system PATH...");
local appFolder = SessionVar.Expand("%AppFolder%");
@@ -6181,7 +6505,7 @@ g_HandleSystemReboot();
</SessionVar>
<SessionVar>
<Name>%ProductVer%</Name>
<Value>0.1.0.0</Value>
<Value>0.2.0.0</Value>
<Type>1</Type>
</SessionVar>
<SessionVar>

View File

@@ -2265,7 +2265,7 @@ end
<Visible>1</Visible>
<Enabled>1</Enabled>
<TabOrder>0</TabOrder>
<IsHTML>0</IsHTML>
<IsHTML>1</IsHTML>
<TextAlign>0</TextAlign>
<VertScroll>1</VertScroll>
<HorizScroll>0</HorizScroll>
@@ -2326,7 +2326,97 @@ end
<IDS_CTRL_BUTTON_BACK>&lt; &amp;Back</IDS_CTRL_BUTTON_BACK>
<IDS_CTRL_BUTTON_CANCEL>&amp;Cancel</IDS_CTRL_BUTTON_CANCEL>
<IDS_CTRL_BUTTON_HELP>&amp;Help</IDS_CTRL_BUTTON_HELP>
<IDS_CTRL_SCROLLTEXT_BODY>Insert your license agreement text here...</IDS_CTRL_SCROLLTEXT_BODY>
<IDS_CTRL_SCROLLTEXT_BODY>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;title&gt;End User License Agreement&lt;/title&gt;
&lt;style&gt;
body {
/*font-family: "Segoe UI", "Microsoft YaHei", Arial, sans-serif;*/
font-size: 9pt;
/*color: #333333;
background-color: #ffffff;*/
-ms-overflow-style: -ms-autohiding-scrollbar;
box-sizing: border-box;
}
h1 {
font-size: 12.5pt;
font-weight: bold;
margin-bottom: 5px;
text-align: center;
}
h2 {
font-size: 10.75pt;
font-weight: bold;
margin-top: 5px;
margin-bottom: 5px;
}
p {
margin: 5px 0;
}
ul,
ol {
margin: 5px 0;
padding: 0;
}
a {
color: #1a73e8;
text-decoration: underline;
}
a:hover {
color: #0b59d1;
text-decoration: none;
}
strong {
font-weight: bold;
}
em {
font-style: italic;
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;End User License Agreement&lt;/h1&gt;
&lt;p&gt;Please read this license agreement carefully before installing or using this software.&lt;/p&gt;
&lt;h2&gt;1. Copyright&lt;/h2&gt;
&lt;p&gt;Copyright 漏 2025 Windows Modern. This software and its source code are protected by copyright law.&lt;/p&gt;
&lt;h2&gt;2. License&lt;/h2&gt;
&lt;p&gt;This software is licensed under the MIT License. You are free to use, copy, modify, and distribute this software and its source code, including for commercial purposes, subject to the terms of the MIT License.&lt;/p&gt;
&lt;h2&gt;3. Third-Party Components&lt;/h2&gt;
&lt;p&gt;This software includes the following third-party open source components, which are subject to their original licenses:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PriTools (Apache License 2.0) - &lt;a href="https://github.com/chausner/PriTools" target="_blank"&gt;https://github.com/chausner/PriTools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;pugixml (MIT License) - &lt;a href="https://pugixml.org/" target="_blank"&gt;https://pugixml.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;RapidJSON (MIT License) - &lt;a href="https://rapidjson.org/" target="_blank"&gt;https://rapidjson.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;WinJS (MIT License) - &lt;a href="https://github.com/winjs/winjs" target="_blank"&gt;https://github.com/winjs/winjs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;markdown.js (MIT License) - &lt;a href="https://github.com/evilstreak/markdown-js" target="_blank"&gt;https://github.com/evilstreak/markdown-js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;4. Disclaimer&lt;/h2&gt;
&lt;p&gt;This software is provided "as is", without any express or implied warranties, including but not limited to warranties of merchantability, fitness for a particular purpose, and non-infringement. In no event shall the authors or copyright holders be
liable for any damages arising from the use of this software, whether direct, indirect, incidental, or consequential.&lt;/p&gt;
&lt;h2&gt;5. Acceptance&lt;/h2&gt;
&lt;p&gt;By installing or using this software, you agree to this license agreement. If you do not agree, do not install or use the software.&lt;/p&gt;
&lt;br&gt;
&lt;/body&gt;
&lt;/html&gt;</IDS_CTRL_SCROLLTEXT_BODY>
<IDS_CTRL_RADIOBTN_AGREE>I agree to the terms of this license agreement</IDS_CTRL_RADIOBTN_AGREE>
<IDS_CTRL_RADIOBTN_DISAGREE>I do not agree to the terms of this license agreement</IDS_CTRL_RADIOBTN_DISAGREE>
<IDS_CTRL_SCROLLTEXT_FILE/>
@@ -2352,7 +2442,94 @@ end
<IDS_CTRL_BUTTON_BACK>&lt; 返回(&amp;B)</IDS_CTRL_BUTTON_BACK>
<IDS_CTRL_BUTTON_CANCEL>取消(&amp;C)</IDS_CTRL_BUTTON_CANCEL>
<IDS_CTRL_BUTTON_HELP>帮助(&amp;H)</IDS_CTRL_BUTTON_HELP>
<IDS_CTRL_SCROLLTEXT_BODY>在此插入您的许可协议文本...</IDS_CTRL_SCROLLTEXT_BODY>
<IDS_CTRL_SCROLLTEXT_BODY>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=GB2312"&gt;
&lt;title&gt;最终用户许可协议&lt;/title&gt;
&lt;style&gt;
body {
/*font-family: "Microsoft YaHei", "Segoe UI", Arial, sans-serif;*/
font-size: 9pt;
/*color: #333333;
background-color: #ffffff;*/
-ms-overflow-style: -ms-autohiding-scrollbar;
box-sizing: border-box;
}
h1 {
font-size: 12.5pt;
font-weight: bold;
margin-bottom: 5px;
text-align: center;
}
h2 {
font-size: 10.75pt;
font-weight: bold;
margin-top: 5px;
margin-bottom: 5px;
}
p {
margin: 5px 0;
}
ul,
ol {
margin: 5px 0;
padding: 0;
}
a {
color: #1a73e8;
text-decoration: underline;
}
a:hover {
color: #0b59d1;
text-decoration: none;
}
strong {
font-weight: bold;
}
em {
font-style: italic;
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;最终用户许可协议&lt;/h1&gt;
&lt;p&gt;请在安装或使用本软件前仔细阅读本许可协议。&lt;/p&gt;
&lt;h2&gt;一、版权声明&lt;/h2&gt;
&lt;p&gt;Copyright &amp;#169; 2025 Windows Modern. 本软件及其源码受版权法保护。&lt;/p&gt;
&lt;h2&gt;二、许可范围&lt;/h2&gt;
&lt;p&gt;本软件遵循 MIT 许可协议。您可以在符合 MIT 许可条件下自由使用、复制、修改、分发本软件及其源码,包括商业用途。&lt;/p&gt;
&lt;h2&gt;三、第三方组件&lt;/h2&gt;
&lt;p&gt;本软件包含以下第三方开源组件,使用这些组件受其原始许可证约束:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PriTools (Apache License 2.0) - &lt;a href="https://github.com/chausner/PriTools" target="_blank"&gt;https://github.com/chausner/PriTools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;pugixml (MIT License) - &lt;a href="https://pugixml.org/" target="_blank"&gt;https://pugixml.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;RapidJSON (MIT License) - &lt;a href="https://rapidjson.org/" target="_blank"&gt;https://rapidjson.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;WinJS (MIT License) - &lt;a href="https://github.com/winjs/winjs" target="_blank"&gt;https://github.com/winjs/winjs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;markdown.js (MIT License) - &lt;a href="https://github.com/evilstreak/markdown-js" target="_blank"&gt;https://github.com/evilstreak/markdown-js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;四、免责声明&lt;/h2&gt;
&lt;p&gt;本软件按“原样”提供,不附带任何明示或暗示的担保,包括但不限于适销性、特定用途适用性和非侵权的保证。无论在何种情况下,作者或版权持有人均不对因使用本软件产生的任何直接、间接、偶然或特殊损害负责。&lt;/p&gt;
&lt;h2&gt;五、接受条款&lt;/h2&gt;
&lt;p&gt;安装或使用本软件即表示您接受本许可协议。如果您不同意本协议,请不要安装或使用本软件。&lt;/p&gt;
&lt;br&gt;
&lt;/body&gt;
&lt;/html&gt;
</IDS_CTRL_SCROLLTEXT_BODY>
<IDS_CTRL_RADIOBTN_AGREE>我同意该许可协议的条款</IDS_CTRL_RADIOBTN_AGREE>
<IDS_CTRL_RADIOBTN_DISAGREE>我不同意该许可协议的条款</IDS_CTRL_RADIOBTN_DISAGREE>
<IDS_CTRL_SCROLLTEXT_FILE/>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -574,6 +574,97 @@ bool KillProcessByFilePath (
CloseHandle (hSnap);
return killed;
}
static std::wstring QueryVersionString (const BYTE *data, const std::wstring &langCode,
const wchar_t *key)
{
wchar_t query [256] = {0};
wsprintfW (query, L"\\StringFileInfo\\%s\\%s", langCode.c_str (), key);
LPWSTR value = nullptr;
UINT len = 0;
if (VerQueryValueW (data, query, (LPVOID *)&value, &len) && value)
return std::wstring (value ? value : L"", len);
return L"";
}
rapidjson::Document GetFileVersionAsJson (const std::wstring &filePath)
{
rapidjson::Document doc;
doc.SetObject ();
auto &alloc = doc.GetAllocator ();
DWORD dummy = 0;
DWORD size = GetFileVersionInfoSizeW (filePath.c_str (), &dummy);
if (size == 0)
{
doc.AddMember ("error", "No version info", alloc);
return doc;
}
std::vector <BYTE> data (size);
if (!GetFileVersionInfoW (filePath.c_str (), 0, size, data.data ()))
{
doc.AddMember ("error", "GetFileVersionInfoW failed", alloc);
return doc;
}
struct LANGANDCODEPAGE
{
WORD wLanguage;
WORD wCodePage;
};
LANGANDCODEPAGE *lpTranslate = nullptr;
UINT cbTranslate = 0;
if (!VerQueryValueW (data.data (),
L"\\VarFileInfo\\Translation",
(LPVOID *)&lpTranslate,
&cbTranslate))
{
doc.AddMember ("error", "No Translation", alloc);
return doc;
}
wchar_t langCode [20] = {};
wsprintfW (langCode, L"%04x%04x",
lpTranslate [0].wLanguage,
lpTranslate [0].wCodePage);
std::wstring lc = langCode;
const wchar_t *keys [] =
{
L"CompanyName",
L"FileDescription",
L"FileVersion",
L"InternalName",
L"OriginalFilename",
L"ProductName",
L"ProductVersion",
L"LegalCopyright"
};
for (auto key : keys)
{
std::wstring val = QueryVersionString (data.data (), lc, key);
if (!val.empty ())
{
rapidjson::Value k;
k.SetString (WStringToString (key, CP_UTF8).c_str (), alloc);
rapidjson::Value v;
v.SetString (WStringToString (val, CP_UTF8).c_str (), alloc);
doc.AddMember (k, v, alloc);
}
}
VS_FIXEDFILEINFO *ffi = nullptr;
UINT ffiLen = 0;
if (VerQueryValueW (data.data (), L"\\", (LPVOID *)&ffi, &ffiLen))
{
if (ffi && ffiLen)
{
wchar_t ver [64];
wsprintfW (ver, L"%u.%u.%u.%u",
HIWORD (ffi->dwFileVersionMS),
LOWORD (ffi->dwFileVersionMS),
HIWORD (ffi->dwFileVersionLS),
LOWORD (ffi->dwFileVersionLS));
doc.AddMember ("FileVersionRaw",
rapidjson::Value ().SetString (WStringToString (ver, CP_UTF8).c_str (), alloc),
alloc);
}
}
return doc;
}
[ComVisible (true)]
public ref class SplashForm: public System::Windows::Forms::Form
@@ -946,11 +1037,22 @@ public ref class MainHtmlWnd: public System::Windows::Forms::Form, public IScrip
property _I_Download ^Download { _I_Download ^get () { return download; }}
property _I_Process ^Process { _I_Process ^get () { return proc; }}
property _I_ResourcePri ^WinJsStringRes { _I_ResourcePri ^get () { return winjs_res; }}
property _I_ResourcePri ^StringResources { _I_ResourcePri ^get () { return winjs_res; }}
String ^FormatDateTime (String ^fmt, String ^jsDate) { return FormatString (fmt, Convert::ToDateTime (jsDate)); }
property String ^CmdArgs { String ^get () { return CStringToMPString (StringArrayToJson (g_cmdargs)); }}
property bool Jump1 { bool get () { return hasjump1; } void set (bool value) { hasjump1 = value; } }
property bool Jump2 { bool get () { return hasjump2; } void set (bool value) { hasjump2 = value; } }
property bool Exec1 { bool get () { return hasexec; } void set (bool value) { hasexec = value; } }
property double TBProgress { void set (double value) { wndinst->TProgressPercent = value; }}
property DWORD TBState { void set (DWORD value) { wndinst->TProgressState = (TBPFLAG)value; }}
String ^GetVersionInfoToJSON (String ^filepath)
{
auto doc = GetFileVersionAsJson (MPStringToStdW (filepath));
rapidjson::StringBuffer buffer;
rapidjson::Writer <rapidjson::StringBuffer> writer (buffer);
doc.Accept (writer);
return CStringToMPString (StringToWString (buffer.GetString (), CP_UTF8));
}
void CloseWindow ()
{
if (wndinst && wndinst->IsHandleCreated) wndinst->Close ();
@@ -1243,6 +1345,9 @@ public ref class MainHtmlWnd: public System::Windows::Forms::Form, public IScrip
web2->ExecWB (OLECMDID_OPTICAL_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, &v, nullptr);
}
}
// 只能设置。0 - 100
property double TProgressPercent { void set (double progressPercent) { if (taskbar) taskbar->SetProgressValue (InvokeGetHWND (), progressPercent * 100, 100 * 100); }}
property TBPFLAG TProgressState { void set (TBPFLAG state) { if (taskbar) taskbar->SetProgressState (InvokeGetHWND (), state); }}
~MainHtmlWnd ()
{
if (taskbar) taskbar->Release ();

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -39,7 +39,21 @@ var MBRET = {
Object.freeze(MBFLAGS);
Object.freeze(MBRET);
function GetLocaleStringFromResId(resId) { return Bridge.Resources.byid(resId); }
(function(global) {
try {
var storage = Bridge.External.Storage;
var path = storage.path;
var root = path.getDir(path.program);
var respath = path.combine(root, "reslib.dll");
var res = Bridge.Resources;
global.respath = respath;
global.getPublicRes = function(resId) {
return res.fromfile(respath, resId);
}
} catch (e) {}
})(this);
function GetLocaleStringFromResId(resId) { try { return getPublicRes(resId); } catch (e) {} }
var msgboxResult = {};
function MessageBox(_lpText, _lpCaption, _uType, _objColor) {
@@ -115,9 +129,29 @@ function MessageBoxForJS(_lpText, _lpCaption, _uType, _objColor, _callback) {
msgcaption.appendChild(msgtitle);
}
}
if (_lpText instanceof HTMLElement) {
_lpText.classList.add("notice-text");
msgcontent.appendChild(_lpText);
if (_lpText instanceof HTMLElement || _lpText instanceof HTMLDivElement || typeof _lpText !== "string") {
try {
_lpText.classList.add("notice-text");
msgcontent.appendChild(_lpText);
} catch (e) {
if (!IsBlackLabel(_lpText)) {
var msgtext = document.createElement("p");
msgtext.textContent = _lpText;
msgtext.classList.add("notice-text");
if (IsBlackLabel(_lpCaption)) {
msgtext.style.marginTop = "0";
}
msgcontent.appendChild(msgtext);
} else {
var msgtext = document.createElement("p");
msgtext.innerText = "";
msgtext.classList.add("notice-text");
if (IsBlackLabel(_lpCaption)) {
msgtext.style.marginTop = "0";
}
msgcontent.appendChild(msgtext);
}
}
} else {
if (!IsBlackLabel(_lpText)) {
var msgtext = document.createElement("p");
@@ -330,7 +364,7 @@ MsgBoxObj.prototype._internalCallback = function(returnValue) {
* @param {string} swTitle 标题
* @param {MBFLAGS} uType 标志,使用 MBFLAGS 常量
* @param {string} swColor 背景颜色文本。
* @returns
* @returns {Promise}
*/
function messageBoxAsync(swText, swTitle, uType, swColor, pfCallback) {
if (typeof Promise === "undefined") {

View File

@@ -7,6 +7,7 @@
max-height: 19px !important;
position: relative;
display: block;
margin: 5px 0;
}
.toggle-switch>input[type="checkbox"] {

View File

@@ -29,6 +29,34 @@
<script type="text/javascript" src="appinstaller/preinit.js"></script>
<script type="text/javascript" src="appinstaller/items.js"></script>
<script type="text/javascript" src="appinstaller/init.js"></script>
<style>
.markdown-style {
font-weight: normal;
font-size: 16px;
-ms-user-select: element;
}
.markdown-style h1 {
font-size: 24px;
}
.markdown-style h2 {
font-size: 20px;
}
.markdown-style p {
font-size: 16px;
}
.markdown-style ul {
font-size: 16px;
}
.markdown-style li {
font-size: 16px;
margin: 0;
}
</style>
</head>
<body>

View File

@@ -28,6 +28,7 @@
<link rel="stylesheet" type="text/css" href="../subpage.css">
<script type="text/javascript" src="preinit.js"></script>
<script type="text/javascript" src="initsame.js"></script>
<script type="text/javascript" src="../../libs/markdown.js"></script>
<script>
try {
window.parent.setItemHighlight("about");
@@ -53,6 +54,243 @@
}
document.getElementById("current-version").textContent = window.currver;
</script>
<p id="about-copyright"></p>
<script>
(function() {
var storage = Bridge.External.Storage;
var path = storage.path;
var verinfo = JSON.parse(Bridge.External.getVersionInfoToJSON(exepath));
var aboutCopyright = document.getElementById("about-copyright");
aboutCopyright.textContent = verinfo.LegalCopyright;
})();
</script>
<p data-res-fromfile="publicRes (133)"></p>
<p>
<a href="https://github.com/modernw/App-Installer-For-Windows-8.x-Reset" target="_blank" data-res-fromfile="publicRes (134)"></a>
</p>
<p>
<a id="about-project-description" data-res-fromfile="publicRes(135)"></a>
</p>
<p>
<a id="about-update-log" data-res-fromfile="publicRes(136)"></a>
</p>
<p>
<a id="about-eula" data-res-fromfile="publicRes(137)"></a>
</p>
<p data-res-fromfile="publicRes (138)"></p>
<ul>
<li><a href="https://github.com/chausner/PriTools" target="_blank">chausner/PriTools</a></li>
<li><a href="https://pugixml.org/" target="_blank">pugixml</a></li>
<li><a href="https://rapidjson.org/" target="_blank">RapidJSON</a></li>
<li><a href="https://github.com/winjs/winjs" target="_blank">WinJS</a></li>
<li><a href="https://github.com/evilstreak/markdown-js" target="_blank">markdown.js</a></li>
</ul>
<script>
(function() {
var aboutUpdateLog = document.getElementById("about-update-log");
var aboutEula = document.getElementById("about-eula");
var aboutProjectDescription = document.getElementById("about-project-description");
var eventutil = Windows.UI.Event.Util;
var storage = Bridge.External.Storage;
var path = storage.path;
var strres = Bridge.External.StringResources;
var jslist = [
"js\\module.js",
"js\\polyfill-ie.js",
"js\\bridge.js",
"js\\dpimodes.js"
];
var libroot = path.combine(path.root, "html");
/**
* 异步显示消息框,返回一个 Promise 对象。
* @param {string | HTMLElement} swText 内容
* @param {string} swTitle 标题
* @param {MBFLAGS} uType 标志,使用 MBFLAGS 常量
* @param {string} swColor 背景颜色文本。
* @returns
*/
var msgbox = function() {};
var MsgBox = function() {};
if (typeof window.parent !== "undefined") {
msgbox = window.parent.messageBoxAsync;
MsgBox = window.parent.MsgBoxObj;
} else {
msgbox = messageBoxAsync;
MsgBox = MsgBoxObj;
}
eventutil.addEvent(aboutUpdateLog, "click", function() {
var content = document.createElement("div");
var progressDisplay = document.createElement("div");
var progress = document.createElement("progress");
var retryBtn = document.createElement("button");
retryBtn.textContent = getPublicRes(132);
retryBtn.style.display = "none";
retryBtn.style.margin = "10px 0";
progress.classList.add("win-ring");
progress.style.color = "white";
var state = document.createElement("span");
progress.style.marginRight = "5px";
progressDisplay.appendChild(progress);
progressDisplay.appendChild(state);
progressDisplay.setAttribute("style", "display: flex; flex-direction: row;");
content.appendChild(progressDisplay);
content.appendChild(retryBtn);
content.style.margin = "10px 0";
content.style.maxHeight = "100%";
content.style.width = "100%";
progressDisplay.style.width = "100%";
content.style.boxSizing = "border-box";
progressDisplay.style.boxSizing = "border-box";
content.classList.add("markdown-style");
msgbox(content, getPublicRes(136));
var fetchFunc = function() {
retryBtn.style.display = "none";
state.textContent = getPublicRes(139);
progress.style.display = "";
WinJS.xhr({
url: "https://api.github.com/repos/modernw/App-Installer-For-Windows-8.x-Reset/releases/tags/" + currver,
}).done(
function(resp) {
var json = JSON.parse(resp.responseText);
var body = json.body;
content.innerHTML = markdown.toHTML(body);
content.style.height = "300px";
content.style.maxHeight = "100%";
},
function(err) {
progress.style.display = "none";
retryBtn.style.display = "block";
var msg = {
message: ""
};
try {
msg = JSON.parse(err.responseText);
} catch (e) {
msg = err.responseText;
}
state.textContent = getPublicRes(140) + (msg.message.length > 0 ? ": " + msg.message : "");
}
);
};
retryBtn.addEventListener("click", function() {
fetchFunc();
});
fetchFunc();
});
eventutil.addEvent(aboutProjectDescription, "click", function() {
function decodeBase64(base64) {
// GitHub 的 content 有换行,必须清理
base64 = base64.replace(/\s/g, "");
return atob(base64);
}
var content = document.createElement("div");
var progressDisplay = document.createElement("div");
var progress = document.createElement("progress");
var retryBtn = document.createElement("button");
retryBtn.textContent = getPublicRes(132);
retryBtn.style.display = "none";
retryBtn.style.margin = "10px 0";
progress.classList.add("win-ring");
progress.style.color = "white";
var state = document.createElement("span");
progress.style.marginRight = "5px";
progressDisplay.appendChild(progress);
progressDisplay.appendChild(state);
progressDisplay.setAttribute("style", "display: flex; flex-direction: row;");
content.appendChild(progressDisplay);
content.appendChild(retryBtn);
content.style.margin = "10px 0";
content.style.maxHeight = "100%";
content.style.whiteSpace = "normal";
content.style.width = "100%";
progressDisplay.style.width = "100%";
content.style.boxSizing = "border-box";
content.classList.add("markdown-style");
progressDisplay.style.boxSizing = "border-box";
msgbox(content, getPublicRes(135));
var fetchFunc = function() {
retryBtn.style.display = "none";
state.textContent = getPublicRes(141);
progress.style.display = "";
WinJS.xhr({
url: "https://api.github.com/repos/modernw/App-Installer-For-Windows-8.x-Reset/readme",
}).done(
function(resp) {
var json = JSON.parse(resp.responseText);
var decoderesult = decodeBase64(json.content);
content.innerHTML = decoderesult;
},
function(err) {
progress.style.display = "none";
retryBtn.style.display = "block";
var msg = {
message: ""
};
try {
msg = JSON.parse(err.responseText);
} catch (e) {
msg = err.responseText;
}
state.textContent = getPublicRes(142) + (msg.message.length > 0 ? ": " + msg.message : "");
}
);
};
retryBtn.addEventListener("click", function() {
fetchFunc();
});
fetchFunc();
});
eventutil.addEvent(aboutEula, "click", function() {
var eulaFilePath = path.combine(path.root, "license");
eulaFilePath = path.combine(eulaFilePath, strres.getString("license"))
var content = document.createElement("iframe");
content.onload = function() {
try {
var winjsurl = path.combine(libroot, "libs\\winjs\\1.0\\css\\ui-light.css");
var style = document.createElement("link");
style.rel = "stylesheet";
style.href = winjsurl;
content.contentWindow.document.head.insertBefore(style, content.contentWindow.document.head.firstChild);
for (var i = 0; i < jslist.length; i++) {
var jsfile = path.combine(libroot, jslist[i]);
var script = document.createElement("script");
script.src = jsfile;
content.contentWindow.document.head.appendChild(script);
}
content.contentWindow.document.body.style.overflowY = "auto";
content.contentWindow.Windows.UI.DPI.mode = 1;
} catch (e) {}
};
content.src = eulaFilePath;
content.style.margin = "10px 0";
var text = document.createElement("div");
text.style.width = "100%";
text.style.height = "300px";
text.style.overflowY = "hidden";
content.style.width = "100%";
content.style.height = "100%";
content.style.maxHeight = "100%";
text.appendChild(content);
var dlg = new MsgBox();
dlg.text = text;
dlg.title = getPublicRes(143);
dlg.show();
setTimeout(function() {
var element = dlg.getElement();
var body = element.querySelector(".notice-body");
var title = element.querySelector(".notice-title");
var content = element.querySelector(".notice-text");
var ctrls = element.querySelector(".notice-controls");
element.classList.remove("win-ui-dark");
element.classList.add("win-ui-light");
title.style.color = "black";
content.style.color = "black";
body.style.backgroundColor = "white";
body.style.color = "black";
}, 0);
});
})();
</script>
</div>
</div>
</body>

View File

@@ -159,6 +159,28 @@
})();
</script>
</div>
<div class="win-settings-section">
<br>
<label class="win-label" for="check-app-has-installed" id="check-app-has-installed-label" data-res-fromfile="publicRes (144)"></label>
<script>
(function() {
"use strict";
var label = document.getElementById("check-app-has-installed-label");
var toggle = new Toggle();
toggle.create();
toggle.parent = label.parentNode;
toggle.showlabel = true;
var winjsres = Bridge.External.WinJsStringRes;
toggle.setStatusText(winjsres.getString("ms-resource://Microsoft.WinJS.1.0/ui/on"), winjsres.getString("ms-resource://Microsoft.WinJS.1.0/ui/off"));
toggle.inputId = "check-app-has-installed";
var ini = Bridge.External.Config.GetConfig();
toggle.addEventListener("change", function() {
ini.set("Settings", "AppInstaller:CheckPackageIsIntalled", toggle.checked);
});
toggle.checked = parseBool(ini.getSection("Settings").getKey("AppInstaller:CheckPackageIsIntalled").value);
})();
</script>
</div>
</div>
</div>
</body>

View File

@@ -81,7 +81,8 @@
}
#newversion-desc {
white-space: pre-wrap;
/*white-space: pre-wrap;*/
white-space: normal;
}
#newversion-desc img {
@@ -313,6 +314,13 @@
var newVersionDescShowOrHide = document.getElementById("newversion-desc-showall-hide");
var checkUpdateLoading = document.getElementById("loading-amine");
var stopProcess = false;
var tbpFlags = {
error: 4,
indeterminate: 1,
noProgress: 0,
normal: 2,
paused: 8
};
function newVersionBlockSizeChanged() {
if (stopProcess) return;
@@ -426,20 +434,22 @@
var path = storage.path;
stopProcess = true;
newVersionBlock.parentNode.style.height = "0px";
checkUpdateText.textContent = getPublicRes(117);
checkUpdateText.textContent = getPublicRes(118);
progress.style.display = "";
checkUpdateBlock.style.height = checkUpdateBlock.scrollHeight + "px";
var anime = Windows.UI.Animation;
var strutil = Bridge.External.String;
var tbputil = Bridge.External;
function setError(error) {
//console.error("download error", error);
checkUpdateText.textContent = strutil.format(getPublicRes(119), error.reason);
progress.style.display = "none";
self.disabled = false;
self.textContent = "重试";
self.textContent = getPublicRes(132);
window.parent.setDisabledForOperation(false);
checkUpdateBlock.style.height = checkUpdateBlock.scrollHeight + "px";
tbputil.tbState = tbpFlags.error;
}
function setException(e) {
@@ -447,6 +457,7 @@
checkUpdateText.textContent = strutil.format(getPublicRes(119), e.message);
window.parent.setDisabledForOperation(false);
checkUpdateBlock.style.height = checkUpdateBlock.scrollHeight + "px";
tbputil.tbState = tbpFlags.error;
}
function setComplete(complete) {
@@ -457,16 +468,18 @@
var settingsapppath = path.combine(path.root, "settings.exe");
window.parent.setDisabledForOperation(false);
var process = Bridge.External.Process;
process.kill(appinstallerpath, true, false);
checkUpdateBlock.style.height = checkUpdateBlock.scrollHeight + "px";
tbputil.tbState = tbpFlags.noProgress;
process.kill(appinstallerpath, true, false);
createProcess(cmdline, tempfile, wndDisplayMode.showNormal, false);
process.kill(settingsapppath, true, false);
//Bridge.External.closeWindow();
}
progress.value = 0;
anime.loading(checkUpdateLoading, true);
var tempdir = path.expand("%temp%");
var tempfile = path.combine(tempdir, "InstallerSetup.exe");
tbputil.tbProgress = 0;
tbputil.tbState = tbpFlags.normal;
downloadFile(downloadUrl, tempfile).done(
function(complete) {
anime.loading(checkUpdateLoading, false);
@@ -482,6 +495,7 @@
progress.value = prog.progress;
checkUpdateText.textContent = strutil.format(getPublicRes(121), Math.floor(prog.progress), formatBytesSize(prog.received), formatBytesSize(prog.total));
checkUpdateBlock.style.height = checkUpdateBlock.scrollHeight + "px";
tbputil.tbProgress = prog.progress;
}
)
}

View File

@@ -0,0 +1,87 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312">
<title>最终用户许可协议</title>
<style>
body {
/*font-family: "Microsoft YaHei", "Segoe UI", Arial, sans-serif;*/
font-size: 9pt;
/*color: #333333;
background-color: #ffffff;*/
-ms-overflow-style: -ms-autohiding-scrollbar;
box-sizing: border-box;
}
h1 {
font-size: 12.5pt;
font-weight: bold;
margin-bottom: 5px;
text-align: center;
}
h2 {
font-size: 10.75pt;
font-weight: bold;
margin-top: 5px;
margin-bottom: 5px;
}
p {
margin: 5px 0;
}
ul,
ol {
margin: 5px 0;
padding: 0;
}
a {
color: #1a73e8;
text-decoration: underline;
}
a:hover {
color: #0b59d1;
text-decoration: none;
}
strong {
font-weight: bold;
}
em {
font-style: italic;
}
</style>
</head>
<body>
<h1>最终用户许可协议</h1>
<p>请在安装或使用本软件前仔细阅读本许可协议。</p>
<h2>一、版权声明</h2>
<p>Copyright &#169; 2025 Windows Modern. 本软件及其源码受版权法保护。</p>
<h2>二、许可范围</h2>
<p>本软件遵循 MIT 许可协议。您可以在符合 MIT 许可条件下自由使用、复制、修改、分发本软件及其源码,包括商业用途。</p>
<h2>三、第三方组件</h2>
<p>本软件包含以下第三方开源组件,使用这些组件受其原始许可证约束:</p>
<ul>
<li>PriTools (Apache License 2.0) - <a href="https://github.com/chausner/PriTools" target="_blank">https://github.com/chausner/PriTools</a></li>
<li>pugixml (MIT License) - <a href="https://pugixml.org/" target="_blank">https://pugixml.org/</a></li>
<li>RapidJSON (MIT License) - <a href="https://rapidjson.org/" target="_blank">https://rapidjson.org/</a></li>
<li>WinJS (MIT License) - <a href="https://github.com/winjs/winjs" target="_blank">https://github.com/winjs/winjs</a></li>
<li>markdown.js (MIT License) - <a href="https://github.com/evilstreak/markdown-js" target="_blank">https://github.com/evilstreak/markdown-js</a></li>
</ul>
<h2>四、免责声明</h2>
<p>本软件按“原样”提供,不附带任何明示或暗示的担保,包括但不限于适销性、特定用途适用性和非侵权的保证。无论在何种情况下,作者或版权持有人均不对因使用本软件产生的任何直接、间接、偶然或特殊损害负责。</p>
<h2>五、接受条款</h2>
<p>安装或使用本软件即表示您接受本许可协议。如果您不同意本协议,请不要安装或使用本软件。</p>
<br>
</body>
</html>

View File

@@ -0,0 +1,91 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>End User License Agreement</title>
<style>
body {
/*font-family: "Segoe UI", "Microsoft YaHei", Arial, sans-serif;*/
font-size: 9pt;
/*color: #333333;
background-color: #ffffff;*/
-ms-overflow-style: -ms-autohiding-scrollbar;
box-sizing: border-box;
}
h1 {
font-size: 12.5pt;
font-weight: bold;
margin-bottom: 5px;
text-align: center;
}
h2 {
font-size: 10.75pt;
font-weight: bold;
margin-top: 5px;
margin-bottom: 5px;
}
p {
margin: 5px 0;
}
ul,
ol {
margin: 5px 0;
padding: 0;
}
a {
color: #1a73e8;
text-decoration: underline;
}
a:hover {
color: #0b59d1;
text-decoration: none;
}
strong {
font-weight: bold;
}
em {
font-style: italic;
}
</style>
</head>
<body>
<h1>End User License Agreement</h1>
<p>Please read this license agreement carefully before installing or using this software.</p>
<h2>1. Copyright</h2>
<p>Copyright © 2025 Windows Modern. This software and its source code are protected by copyright law.</p>
<h2>2. License</h2>
<p>This software is licensed under the MIT License. You are free to use, copy, modify, and distribute this software and its source code, including for commercial purposes, subject to the terms of the MIT License.</p>
<h2>3. Third-Party Components</h2>
<p>This software includes the following third-party open source components, which are subject to their original licenses:</p>
<ul>
<li>PriTools (Apache License 2.0) - <a href="https://github.com/chausner/PriTools" target="_blank">https://github.com/chausner/PriTools</a></li>
<li>pugixml (MIT License) - <a href="https://pugixml.org/" target="_blank">https://pugixml.org/</a></li>
<li>RapidJSON (MIT License) - <a href="https://rapidjson.org/" target="_blank">https://rapidjson.org/</a></li>
<li>WinJS (MIT License) - <a href="https://github.com/winjs/winjs" target="_blank">https://github.com/winjs/winjs</a></li>
<li>markdown.js (MIT License) - <a href="https://github.com/evilstreak/markdown-js" target="_blank">https://github.com/evilstreak/markdown-js</a></li>
</ul>
<h2>4. Disclaimer</h2>
<p>This software is provided "as is", without any express or implied warranties, including but not limited to warranties of merchantability, fitness for a particular purpose, and non-infringement. In no event shall the authors or copyright holders be
liable for any damages arising from the use of this software, whether direct, indirect, incidental, or consequential.</p>
<h2>5. Acceptance</h2>
<p>By installing or using this software, you agree to this license agreement. If you do not agree, do not install or use the software.</p>
<br>
</body>
</html>

View File

@@ -113,7 +113,6 @@
<lang name="zh-TW">關閉</lang>
<lang name="zu-ZA">Cishile</lang>
</resource>
<resource id="ms-resource://Microsoft.WinJS.1.0/ui/on">
<lang name="zh-CN"></lang>
<lang name="en-US">On</lang>
@@ -227,4 +226,8 @@
<lang name="zh-TW">開啟</lang>
<lang name="zu-ZA">Vuliwe</lang>
</resource>
<resource id="license">
<lang name="zh-CN">license_cn.html</lang>
<lang name="en-US">license_en.html</lang>
</resource>
</resources>