diff --git a/Generated/InstallerSetup.exe b/Generated/InstallerSetup.exe new file mode 100644 index 0000000..daf7151 Binary files /dev/null and b/Generated/InstallerSetup.exe differ diff --git a/appinstaller/bridge.h b/appinstaller/bridge.h index e011187..999c2d8 100644 --- a/appinstaller/bridge.h +++ b/appinstaller/bridge.h @@ -2,7 +2,15 @@ #include #include "mpstr.h" #include "nstring.h" +#include "filepath.h" #include +#include +#include +#include +#include +#include +#include "mpstr.h" +#include "strcode.h" using namespace System; using namespace System::Runtime::InteropServices; @@ -85,4 +93,298 @@ public ref class _I_String } return Format (pih, newargs); } -}; \ No newline at end of file +}; +String ^StringArrayToJson (array ^strs) +{ + using namespace rapidjson; + Document doc; + doc.SetArray (); + Document::AllocatorType &allocator = doc.GetAllocator (); + for each (String ^s in strs) + { + std::wstring ws = MPStringToStdW (s); // String^ → std::wstring + std::string utf8 = WStringToString (ws, CP_UTF8); // 简易宽转 UTF-8,如需更严谨可用 WideCharToMultiByte + doc.PushBack (Value (utf8.c_str (), allocator), allocator); + } + StringBuffer buffer; + Writer writer (buffer); + doc.Accept (writer); + std::string json = buffer.GetString (); + std::wstring wjson = StringToWString (json, CP_UTF8); + return CStringToMPString (wjson); +} +std::wstring StringArrayToJson (const std::vector& arr) +{ + using namespace rapidjson; + Document doc; + doc.SetArray (); + auto &allocator = doc.GetAllocator (); + for (const auto &ws : arr) + { + std::string utf8 = WStringToUtf8 (ws); + doc.PushBack (Value (utf8.c_str (), allocator), allocator); + } + StringBuffer buffer; + Writer writer (buffer); + doc.Accept (writer); + return Utf8ToWString (buffer.GetString ()); +} +[ComVisible (true)] +public ref class _I_Path +{ + public: + property String ^Current + { + String ^get () { return CStringToMPString (GetCurrentDirectoryW ()); } + void set (String ^dir) { SetCurrentDirectoryW (MPStringToStdW (dir).c_str ()); } + } + property String ^Program { String ^get () { return CStringToMPString (GetCurrentProgramPathW ()); } } + property String ^Root { String ^get () { return CStringToMPString (GetFileDirectoryW (GetCurrentProgramPathW ())); }} + String ^Combine (String ^l, String ^r) { return CStringToMPString (CombinePath (MPStringToStdW (l), MPStringToStdW (r))); } + String ^GetName (String ^path) + { + std::wstring cpath = MPStringToStdW (path); + LPWSTR lp = PathFindFileNameW (cpath.c_str ()); + return lp ? CStringToMPString (lp) : String::Empty; + } + String ^GetDirectory (String ^path) { return CStringToMPString (GetFileDirectoryW (MPStringToStdW (path))); } + String ^GetDir (String ^path) { return GetDirectory (path); } + bool Exist (String ^path) { return IsPathExists (MPStringToStdW (path)); } + bool FileExist (String ^filepath) { return IsFileExists (MPStringToStdW (filepath)); } + bool DirectoryExist (String ^dirpath) { return IsDirectoryExists (MPStringToStdW (dirpath)); } + bool DirExist (String ^dirpath) { return DirectoryExist (dirpath); } + String ^GetEnvironmentString (String ^str) { return CStringToMPString (ProcessEnvVars (MPStringToStdW (str))); } + bool ValidName (String ^filename) { return IsValidWindowsName (MPStringToStdW (filename)); } + // 过滤器用"\"分隔每个类型 + String ^EnumFilesToJson (String ^dir, String ^filter, bool withpath, bool sort, bool includesub) + { + std::vector res; + ::EnumFiles (MPStringToStdW (dir), MPStringToStdW (filter), res, withpath, sort, includesub); + return CStringToMPString (StringArrayToJson (res)); + } + String ^EnumDirsToJson (String ^dir, bool withpath, bool sort, bool includesub) + { + std::vector res; + EnumDirectory (MPStringToStdW (dir), res, withpath, sort, includesub); + return CStringToMPString (StringArrayToJson (res)); + } + String ^EnumSubDirsToJson (String ^dir, bool withpath) + { + std::vector res = EnumSubdirectories (MPStringToStdW (dir), withpath); + return CStringToMPString (StringArrayToJson (res)); + } + array ^EnumFiles (String ^dir, String ^filter, bool withpath, bool sort, bool includesub) + { + std::vector res; + ::EnumFiles (MPStringToStdW (dir), MPStringToStdW (filter), res, withpath, sort, includesub); + auto retarr = gcnew array (res.size ()); + for (size_t i = 0; i < res.size (); i ++) + { + retarr [i] = CStringToMPString (res [i]); + } + return retarr; + } + array ^EnumDirs (String ^dir, bool withpath, bool sort, bool includesub) + { + std::vector res; + EnumDirectory (MPStringToStdW (dir), res, withpath, sort, includesub); + auto retarr = gcnew array (res.size ()); + for (size_t i = 0; i < res.size (); i ++) + { + retarr [i] = CStringToMPString (res [i]); + } + return retarr; + } + array ^EnumSubDirs (String ^dir, bool withpath) + { + std::vector res = EnumSubdirectories (MPStringToStdW (dir), withpath); + auto retarr = gcnew array (res.size ()); + for (size_t i = 0; i < res.size (); i ++) + { + retarr [i] = CStringToMPString (res [i]); + } + return retarr; + } + String ^CommonPrefix (String ^path1, String ^path2) { return CStringToMPString (PathCommonPrefix (MPStringToStdW (path1), MPStringToStdW (path2))); } + String ^EnsureDirSlash (String ^dir) { return CStringToMPString (EnsureTrailingSlash (MPStringToStdW (dir))); } + String ^Normalize (String ^path) { return CStringToMPString (NormalizePath (MPStringToStdW (path))); } + String ^FullPathName (String ^path) { return CStringToMPString (GetFullPathName (MPStringToStdW (path))); } + String ^FullPath (String ^path) { return FullPathName (path); } + String ^Expand (String ^path) { return CStringToMPString (ProcessEnvVars (MPStringToStdW (path))); } + bool PEquals (String ^l, String ^r) { return PathEquals (MPStringToStdW (l), MPStringToStdW (r)); } +}; +[ComVisible (true)] +public ref class _I_Entry +{ + protected: + String ^path; + public: + _I_Entry (String ^path): path (path) {} + _I_Entry (): path (String::Empty) {} + property String ^Path { String ^get () { return path; } void set (String ^file) { path = file; } } + property String ^Name + { + String ^get () + { + std::wstring file = MPStringToStdW (path); + LPWSTR lpstr = PathFindFileNameW (file.c_str ()); + return lpstr ? CStringToMPString (lpstr) : String::Empty; + } + } + property String ^Directory { String ^get () { return CStringToMPString (GetFileDirectoryW (MPStringToStdW (path))); }} + property String ^Root { String ^get () { return Directory; }} + property bool Exist { virtual bool get () { return IsPathExists (MPStringToStdW (path)); }} + property String ^Uri + { + String ^get () + { + using namespace System; + try + { + auto uri = gcnew System::Uri (System::IO::Path::GetFullPath (path)); + auto uriText = uri->AbsoluteUri; + return uriText; + } + catch (...) { return String::Empty; } + } + } + property String ^FullPath { String ^get () { return System::IO::Path::GetFullPath (path); }} +}; +[ComVisible (true)] +public ref class _I_File: public _I_Entry +{ + protected: + System::Text::Encoding ^lastEncoding; + public: + _I_File (String ^filepath): _I_Entry (filepath) {} + _I_File (): _I_Entry (String::Empty) {} + String ^Get () + { + using namespace System::IO; + if (String::IsNullOrEmpty (path)) return String::Empty; + FileStream ^fs = nullptr; + StreamReader ^sr = nullptr; + try + { + fs = gcnew FileStream ( + path, + FileMode::OpenOrCreate, + FileAccess::ReadWrite, + FileShare::ReadWrite + ); + sr = gcnew StreamReader (fs, Encoding::UTF8, true); + String ^text = sr->ReadToEnd (); + auto lastEncoding = sr->CurrentEncoding; + return text; + } + finally + { + if (sr) delete sr; + if (fs) delete fs; + } + } + void Set (String ^content) + { + using namespace System::IO; + if (String::IsNullOrEmpty (path)) return; + Encoding ^enc = lastEncoding ? lastEncoding : Encoding::UTF8; + FileStream ^fs = nullptr; + StreamWriter ^sw = nullptr; + try + { + fs = gcnew FileStream ( + path, + FileMode::Create, + FileAccess::ReadWrite, + FileShare::ReadWrite + ); + sw = gcnew StreamWriter (fs, enc); + sw->Write (content); + sw->Flush (); + } + finally + { + if (sw) delete sw; + if (fs) delete fs; + } + } + property String ^Content + { + String ^get () { return Get (); } + void set (String ^value) { Set (value); } + } + property bool Exist { bool get () override { return IsFileExists (MPStringToStdW (path)); }} + property String ^FilePath { String ^get () { return this->Path; } void set (String ^value) { this->Path = value; }} +}; +[ComVisible (true)] +public ref class _I_Directory: public _I_Entry +{ + public: + _I_Directory (String ^dirpath): _I_Entry (dirpath) {} + _I_Directory (_I_Entry ^file): _I_Entry (file->Directory) {} + _I_Directory (): _I_Entry (String::Empty) {} + property String ^DirectoryPath { String ^get () { return this->Path; } void set (String ^value) { this->Path = value; } } + property String ^DirPath { String ^get () { return this->DirectoryPath; } void set (String ^value) { this->DirectoryPath = value; } } + property bool Exist { bool get () override { return IsDirectoryExists (MPStringToStdW (path)); }} + String ^EnumFilesToJson (String ^filter, bool withpath, bool sort, bool includesub) + { + std::vector res; + ::EnumFiles (MPStringToStdW (DirPath), MPStringToStdW (filter), res, withpath, sort, includesub); + return CStringToMPString (StringArrayToJson (res)); + } + String ^EnumDirsToJson (bool withpath, bool sort, bool includesub) + { + std::vector res; + EnumDirectory (MPStringToStdW (DirPath), res, withpath, sort, includesub); + return CStringToMPString (StringArrayToJson (res)); + } + String ^EnumSubDirsToJson (bool withpath) + { + std::vector res = EnumSubdirectories (MPStringToStdW (DirPath), withpath); + return CStringToMPString (StringArrayToJson (res)); + } + array ^EnumFiles (String ^filter, bool withpath, bool sort, bool includesub) + { + std::vector res; + ::EnumFiles (MPStringToStdW (DirPath), MPStringToStdW (filter), res, withpath, sort, includesub); + auto retarr = gcnew array (res.size ()); + for (size_t i = 0; i < res.size (); i ++) + { + retarr [i] = CStringToMPString (res [i]); + } + return retarr; + } + array ^EnumDirs (bool withpath, bool sort, bool includesub) + { + std::vector res; + EnumDirectory (MPStringToStdW (DirPath), res, withpath, sort, includesub); + auto retarr = gcnew array (res.size ()); + for (size_t i = 0; i < res.size (); i ++) + { + retarr [i] = CStringToMPString (res [i]); + } + return retarr; + } + array ^EnumSubDirs (bool withpath) + { + std::vector res = EnumSubdirectories (MPStringToStdW (DirPath), withpath); + auto retarr = gcnew array (res.size ()); + for (size_t i = 0; i < res.size (); i ++) + { + retarr [i] = CStringToMPString (res [i]); + } + return retarr; + } +}; +[ComVisible (true)] +public ref class _I_Storage +{ + protected: + _I_Path ^path = gcnew _I_Path (); + public: + property _I_Path ^Path { _I_Path ^get () { return path; }} + _I_File ^GetFile (String ^path) { return gcnew _I_File (path); } + _I_Directory ^GetDirectory (String ^path) { return gcnew _I_Directory (path); } + _I_Directory ^GetDir (String ^path) { return GetDirectory (path); } +}; + diff --git a/appinstaller/filepath.h b/appinstaller/filepath.h index 0887e3e..c4b7645 100644 --- a/appinstaller/filepath.h +++ b/appinstaller/filepath.h @@ -869,306 +869,3 @@ bool PathEquals (const std::wstring &path1, const std::wstring &path2) PathCanonicalizeW (buf2.data (), path2.c_str ()); return IsNormalizeStringEquals (buf1.data (), buf2.data ()); } - -#ifdef __cplusplus_cli -#include -#include -#include -#include -#include -#include "mpstr.h" -#include "strcode.h" -using namespace System; -using namespace System::Runtime::InteropServices; -String ^StringArrayToJson (array ^strs) -{ - using namespace rapidjson; - Document doc; - doc.SetArray (); - Document::AllocatorType &allocator = doc.GetAllocator (); - for each (String ^s in strs) - { - std::wstring ws = MPStringToStdW (s); // String^ → std::wstring - std::string utf8 = WStringToString (ws, CP_UTF8); // 简易宽转 UTF-8,如需更严谨可用 WideCharToMultiByte - doc.PushBack (Value (utf8.c_str (), allocator), allocator); - } - StringBuffer buffer; - Writer writer (buffer); - doc.Accept (writer); - std::string json = buffer.GetString (); - std::wstring wjson = StringToWString (json, CP_UTF8); - return CStringToMPString (wjson); -} -std::wstring StringArrayToJson (const std::vector& arr) -{ - using namespace rapidjson; - Document doc; - doc.SetArray (); - auto &allocator = doc.GetAllocator (); - for (const auto &ws : arr) - { - std::string utf8 = WStringToUtf8 (ws); - doc.PushBack (Value (utf8.c_str (), allocator), allocator); - } - StringBuffer buffer; - Writer writer (buffer); - doc.Accept (writer); - return Utf8ToWString (buffer.GetString ()); -} -[ComVisible (true)] -public ref class _I_Path -{ - public: - property String ^Current - { - String ^get () { return CStringToMPString (GetCurrentDirectoryW ()); } - void set (String ^dir) { SetCurrentDirectoryW (MPStringToStdW (dir).c_str ()); } - } - property String ^Program { String ^get () { return CStringToMPString (GetCurrentProgramPathW ()); } } - property String ^Root { String ^get () { return CStringToMPString (GetFileDirectoryW (GetCurrentProgramPathW ())); }} - String ^Combine (String ^l, String ^r) { return CStringToMPString (CombinePath (MPStringToStdW (l), MPStringToStdW (r))); } - String ^GetName (String ^path) - { - std::wstring cpath = MPStringToStdW (path); - LPWSTR lp = PathFindFileNameW (cpath.c_str ()); - return lp ? CStringToMPString (lp) : String::Empty; - } - String ^GetDirectory (String ^path) { return CStringToMPString (GetFileDirectoryW (MPStringToStdW (path))); } - String ^GetDir (String ^path) { return GetDirectory (path); } - bool Exist (String ^path) { return IsPathExists (MPStringToStdW (path)); } - bool FileExist (String ^filepath) { return IsFileExists (MPStringToStdW (filepath)); } - bool DirectoryExist (String ^dirpath) { return IsDirectoryExists (MPStringToStdW (dirpath)); } - bool DirExist (String ^dirpath) { return DirectoryExist (dirpath); } - String ^GetEnvironmentString (String ^str) { return CStringToMPString (ProcessEnvVars (MPStringToStdW (str))); } - bool ValidName (String ^filename) { return IsValidWindowsName (MPStringToStdW (filename)); } - // 过滤器用"\"分隔每个类型 - String ^EnumFilesToJson (String ^dir, String ^filter, bool withpath, bool sort, bool includesub) - { - std::vector res; - ::EnumFiles (MPStringToStdW (dir), MPStringToStdW (filter), res, withpath, sort, includesub); - return CStringToMPString (StringArrayToJson (res)); - } - String ^EnumDirsToJson (String ^dir, bool withpath, bool sort, bool includesub) - { - std::vector res; - EnumDirectory (MPStringToStdW (dir), res, withpath, sort, includesub); - return CStringToMPString (StringArrayToJson (res)); - } - String ^EnumSubDirsToJson (String ^dir, bool withpath) - { - std::vector res = EnumSubdirectories (MPStringToStdW (dir), withpath); - return CStringToMPString (StringArrayToJson (res)); - } - array ^EnumFiles (String ^dir, String ^filter, bool withpath, bool sort, bool includesub) - { - std::vector res; - ::EnumFiles (MPStringToStdW (dir), MPStringToStdW (filter), res, withpath, sort, includesub); - auto retarr = gcnew array (res.size ()); - for (size_t i = 0; i < res.size (); i ++) - { - retarr [i] = CStringToMPString (res [i]); - } - return retarr; - } - array ^EnumDirs (String ^dir, bool withpath, bool sort, bool includesub) - { - std::vector res; - EnumDirectory (MPStringToStdW (dir), res, withpath, sort, includesub); - auto retarr = gcnew array (res.size ()); - for (size_t i = 0; i < res.size (); i ++) - { - retarr [i] = CStringToMPString (res [i]); - } - return retarr; - } - array ^EnumSubDirs (String ^dir, bool withpath) - { - std::vector res = EnumSubdirectories (MPStringToStdW (dir), withpath); - auto retarr = gcnew array (res.size ()); - for (size_t i = 0; i < res.size (); i ++) - { - retarr [i] = CStringToMPString (res [i]); - } - return retarr; - } - String ^CommonPrefix (String ^path1, String ^path2) { return CStringToMPString (PathCommonPrefix (MPStringToStdW (path1), MPStringToStdW (path2))); } - String ^EnsureDirSlash (String ^dir) { return CStringToMPString (EnsureTrailingSlash (MPStringToStdW (dir))); } - String ^Normalize (String ^path) { return CStringToMPString (NormalizePath (MPStringToStdW (path))); } - String ^FullPathName (String ^path) { return CStringToMPString (GetFullPathName (MPStringToStdW (path))); } - bool PEquals (String ^l, String ^r) { return PathEquals (MPStringToStdW (l), MPStringToStdW (r)); } -}; -[ComVisible (true)] -public ref class _I_Entry -{ - protected: - String ^path; - public: - _I_Entry (String ^path): path (path) {} - _I_Entry (): path (String::Empty) {} - property String ^Path { String ^get () { return path; } void set (String ^file) { path = file; } } - property String ^Name - { - String ^get () - { - std::wstring file = MPStringToStdW (path); - LPWSTR lpstr = PathFindFileNameW (file.c_str ()); - return lpstr ? CStringToMPString (lpstr) : String::Empty; - } - } - property String ^Directory { String ^get () { return CStringToMPString (GetFileDirectoryW (MPStringToStdW (path))); }} - property String ^Root { String ^get () { return Directory; }} - property bool Exist { virtual bool get () { return IsPathExists (MPStringToStdW (path)); }} - property String ^Uri - { - String ^get () - { - using namespace System; - try - { - auto uri = gcnew System::Uri (System::IO::Path::GetFullPath (path)); - auto uriText = uri->AbsoluteUri; - return uriText; - } - catch (...) { return String::Empty; } - } - } - property String ^FullPath { String ^get () { return System::IO::Path::GetFullPath (path); }} -}; -[ComVisible (true)] -public ref class _I_File: public _I_Entry -{ - protected: - System::Text::Encoding ^lastEncoding; - public: - _I_File (String ^filepath): _I_Entry (filepath) {} - _I_File (): _I_Entry (String::Empty) {} - String ^Get () - { - using namespace System::IO; - if (String::IsNullOrEmpty (path)) return String::Empty; - FileStream ^fs = nullptr; - StreamReader ^sr = nullptr; - try - { - fs = gcnew FileStream ( - path, - FileMode::OpenOrCreate, - FileAccess::ReadWrite, - FileShare::ReadWrite - ); - sr = gcnew StreamReader (fs, Encoding::UTF8, true); - String ^text = sr->ReadToEnd (); - auto lastEncoding = sr->CurrentEncoding; - return text; - } - finally - { - if (sr) delete sr; - if (fs) delete fs; - } - } - void Set (String ^content) - { - using namespace System::IO; - if (String::IsNullOrEmpty (path)) return; - Encoding ^enc = lastEncoding ? lastEncoding : Encoding::UTF8; - FileStream ^fs = nullptr; - StreamWriter ^sw = nullptr; - try - { - fs = gcnew FileStream ( - path, - FileMode::Create, - FileAccess::ReadWrite, - FileShare::ReadWrite - ); - sw = gcnew StreamWriter (fs, enc); - sw->Write (content); - sw->Flush (); - } - finally - { - if (sw) delete sw; - if (fs) delete fs; - } - } - property String ^Content - { - String ^get () { return Get (); } - void set (String ^value) { Set (value); } - } - property bool Exist { bool get () override { return IsFileExists (MPStringToStdW (path)); }} - property String ^FilePath { String ^get () { return this->Path; } void set (String ^value) { this->Path = value; }} -}; -[ComVisible (true)] -public ref class _I_Directory: public _I_Entry -{ - public: - _I_Directory (String ^dirpath): _I_Entry (dirpath) {} - _I_Directory (_I_Entry ^file): _I_Entry (file->Directory) {} - _I_Directory (): _I_Entry (String::Empty) {} - property String ^DirectoryPath { String ^get () { return this->Path; } void set (String ^value) { this->Path = value; } } - property String ^DirPath { String ^get () { return this->DirectoryPath; } void set (String ^value) { this->DirectoryPath = value; } } - property bool Exist { bool get () override { return IsDirectoryExists (MPStringToStdW (path)); }} - String ^EnumFilesToJson (String ^filter, bool withpath, bool sort, bool includesub) - { - std::vector res; - ::EnumFiles (MPStringToStdW (DirPath), MPStringToStdW (filter), res, withpath, sort, includesub); - return CStringToMPString (StringArrayToJson (res)); - } - String ^EnumDirsToJson (bool withpath, bool sort, bool includesub) - { - std::vector res; - EnumDirectory (MPStringToStdW (DirPath), res, withpath, sort, includesub); - return CStringToMPString (StringArrayToJson (res)); - } - String ^EnumSubDirsToJson (bool withpath) - { - std::vector res = EnumSubdirectories (MPStringToStdW (DirPath), withpath); - return CStringToMPString (StringArrayToJson (res)); - } - array ^EnumFiles (String ^filter, bool withpath, bool sort, bool includesub) - { - std::vector res; - ::EnumFiles (MPStringToStdW (DirPath), MPStringToStdW (filter), res, withpath, sort, includesub); - auto retarr = gcnew array (res.size ()); - for (size_t i = 0; i < res.size (); i ++) - { - retarr [i] = CStringToMPString (res [i]); - } - return retarr; - } - array ^EnumDirs (bool withpath, bool sort, bool includesub) - { - std::vector res; - EnumDirectory (MPStringToStdW (DirPath), res, withpath, sort, includesub); - auto retarr = gcnew array (res.size ()); - for (size_t i = 0; i < res.size (); i ++) - { - retarr [i] = CStringToMPString (res [i]); - } - return retarr; - } - array ^EnumSubDirs (bool withpath) - { - std::vector res = EnumSubdirectories (MPStringToStdW (DirPath), withpath); - auto retarr = gcnew array (res.size ()); - for (size_t i = 0; i < res.size (); i ++) - { - retarr [i] = CStringToMPString (res [i]); - } - return retarr; - } -}; -[ComVisible (true)] -public ref class _I_Storage -{ - protected: - _I_Path ^path = gcnew _I_Path (); - public: - property _I_Path ^Path { _I_Path ^get () { return path; }} - _I_File ^GetFile (String ^path) { return gcnew _I_File (path); } - _I_Directory ^GetDirectory (String ^path) { return gcnew _I_Directory (path); } - _I_Directory ^GetDir (String ^path) { return GetDirectory (path); } -}; -#endif \ No newline at end of file diff --git a/appinstaller/main.cpp b/appinstaller/main.cpp index a38d37c..dae9f7e 100644 --- a/appinstaller/main.cpp +++ b/appinstaller/main.cpp @@ -22,6 +22,7 @@ #include "notice.h" #include "certmgr.h" #include "bridge.h" +#include "filepath.h" using namespace System; using namespace System::Runtime::InteropServices; @@ -170,11 +171,13 @@ public ref class _I_Bridge_Base protected: _I_String ^str = gcnew _I_String (); _I_InitConfig ^initconfig = gcnew _I_InitConfig (); - _I_Storage ^storage; + _I_Storage ^storage = gcnew _I_Storage (); + _I_Package ^pkg = gcnew _I_Package (); public: property _I_String ^String { _I_String ^get () { return str; }} property _I_InitConfig ^Config { _I_InitConfig ^get () { return initconfig; }} property _I_Storage ^Storage { _I_Storage ^get () { return storage; }} + property _I_Package ^Package { _I_Package ^get () { return pkg; }} }; [ComVisible (true)] public interface class IScriptBridge diff --git a/others/Autosave/autosave_2025-11-30_22-49-47.suf b/others/Autosave/autosave_2025-11-30_22-49-47.suf new file mode 100644 index 0000000..cc29859 --- /dev/null +++ b/others/Autosave/autosave_2025-11-30_22-49-47.suf @@ -0,0 +1,6001 @@ + + +{AFB904C4-C255-4540-B97E-A75A34F1FFB0} +9.5.3.0 + + + +1 + +*.* +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\shared +* +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +1 + +1 +1 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\appinstaller.exe +appinstaller.exe +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +exe +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +1 +0 +0 +0 +0 +0 + +App Installer + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\certmgr.dll +certmgr.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\notice.dll +notice.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\pkgmgr.dll +pkgmgr.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\pkgread.dll +pkgread.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\PriFileFormat.dll +PriFileFormat.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\priformatcli.dll +priformatcli.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\reslib.dll +reslib.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\settings.exe +settings.exe +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +exe +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +1 +0 +0 +0 +0 +0 + +Settings + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\others\uninstall_icon.ico +uninstall_icon.ico +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\others +ico +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + + + + +100 +Welcome to Setup +1 +Welcome to Setup +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +77 +1 + + +1 +102 +1 +1 +78 +1 + + +2 +200 +1 +1 +1 +0 + + +2 +300 +1 +1 +0 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Welcome +Welcome to the installer for %ProductName% %ProductVer% +&Next > +< &Back +&Cancel +&Help +Welcome to the installer for %ProductName% %ProductVer%. + +It is strongly recommended that you exit all Windows programs before continuing with this installation. + +If you have any other programs running, please click Cancel, close the programs, and run this setup again. + +Otherwise, click Next to continue. + +Welcome + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +欢迎 +欢迎使用 %ProductName% %ProductVer% 安装程序 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +欢迎使用 %ProductName% %ProductVer% 安装程序。 + +强烈建议您在继续该安装之前,退出所有 Windows 程序。 + +如果您有任何其他程序正在运行,请单击“取消”,关闭程序,然后再次运行该安装程序。 + +否则,请单击“下一步”继续。 + +欢迎 + + + + + +125 +License Agreement +2 +License Agreement +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +1 + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +3 +400 +1 +1 +0 +0 +0 +1 +0 +0 + +1 +1 + + + +5 +602 +1 +1 +35 +1 +602 +603 + + +5 +603 +1 +1 +40 +0 +602 +603 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +License Agreement +Please read the following license agreement carefully. +&Next > +< &Back +&Cancel +&Help +Insert your license agreement text here... +I agree to the terms of this license agreement +I do not agree to the terms of this license agreement + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +许可协议 +请仔细阅读以下许可协议。 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +在此插入您的许可协议文本... +我同意该许可协议的条款 +我不同意该许可协议的条款 + + + + + + +120 +User Information +2 +User Information +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +2 +0 +1 + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +98 +1 + + +1 +101 +1 +1 +99 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +203 +1 +1 +0 +0 + + +2 +204 +1 +1 +97 +0 + + +2 +211 +1 +1 +1 +0 + + +6 +821 +1 +1 +2 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%UserName% + + +1 +121 +0 +1 +3 +0 + + +2 +212 +1 +1 +4 +0 + + +6 +822 +1 +1 +5 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%UserCompany% + + +1 +122 +0 +1 +6 +0 + + +2 +213 +0 +0 +7 +0 + + +6 +823 +0 +0 +8 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar03% + + +1 +123 +0 +1 +9 +0 + + +2 +214 +0 +0 +10 +0 + + +6 +824 +0 +0 +11 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar04% + + +1 +124 +0 +1 +12 +0 + + +2 +215 +0 +0 +13 +0 + + +6 +825 +0 +0 +14 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar05% + + +1 +125 +0 +1 +15 +0 + + +2 +216 +0 +0 +16 +0 + + +6 +826 +0 +0 +17 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar06% + + +1 +126 +0 +1 +18 +0 + + +2 +217 +0 +0 +19 +0 + + +6 +827 +0 +0 +20 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar07% + + +1 +127 +0 +1 +21 +0 + + +2 +218 +0 +0 +22 +0 + + +6 +828 +0 +0 +23 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar08% + + +1 +128 +0 +1 +24 +0 + + +2 +219 +0 +0 +25 +0 + + +6 +829 +0 +0 +26 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar09% + + +1 +129 +0 +1 +27 +0 + + +2 +220 +0 +0 +28 +0 + + +6 +830 +0 +0 +29 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar10% + + +1 +130 +0 +1 +30 +0 + + +2 +221 +0 +0 +31 +0 + + +6 +831 +0 +0 +32 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar11% + + +1 +131 +0 +1 +33 +0 + + +2 +222 +0 +0 +34 +0 + + +6 +832 +0 +0 +35 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar12% + + +1 +132 +0 +1 +36 +0 + + +2 +223 +0 +0 +37 +0 + + +6 +833 +0 +0 +38 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar13% + + +1 +133 +0 +1 +39 +0 + + +2 +224 +0 +0 +40 +0 + + +6 +834 +0 +0 +41 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar14% + + +1 +134 +0 +1 +42 +0 + + +2 +225 +0 +0 +43 +0 + + +6 +835 +0 +0 +44 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar15% + + +1 +135 +0 +1 +45 +0 + + +2 +226 +0 +0 +46 +0 + + +6 +836 +0 +0 +47 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar16% + + +1 +136 +0 +1 +48 +0 + + +2 +227 +0 +0 +49 +0 + + +6 +837 +0 +0 +50 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar17% + + +1 +137 +0 +1 +51 +0 + + +2 +228 +0 +0 +52 +0 + + +6 +838 +0 +0 +53 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar18% + + +1 +138 +0 +1 +54 +0 + + +2 +229 +0 +0 +55 +0 + + +6 +839 +0 +0 +56 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar19% + + +1 +139 +0 +1 +57 +0 + + +2 +230 +0 +0 +58 +0 + + +6 +840 +0 +0 +59 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar20% + + +1 +140 +0 +1 +60 +0 + + +2 +231 +0 +0 +61 +0 + + +6 +841 +0 +0 +62 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar21% + + +1 +141 +0 +1 +63 +0 + + +2 +232 +0 +0 +64 +0 + + +6 +842 +0 +0 +65 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar22% + + +1 +142 +0 +1 +66 +0 + + +2 +233 +0 +0 +67 +0 + + +6 +843 +0 +0 +68 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar23% + + +1 +143 +0 +1 +69 +0 + + +2 +234 +0 +0 +70 +0 + + +6 +844 +0 +0 +71 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar24% + + +1 +144 +0 +1 +72 +0 + + +2 +235 +0 +0 +73 +0 + + +6 +845 +0 +0 +74 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar25% + + +1 +145 +0 +1 +75 +0 + + +2 +236 +0 +0 +76 +0 + + +6 +846 +0 +0 +77 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar26% + + +1 +146 +0 +1 +78 +0 + + +2 +237 +0 +0 +79 +0 + + +6 +847 +0 +0 +80 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar27% + + +1 +147 +0 +1 +81 +0 + + +2 +238 +0 +0 +82 +0 + + +6 +848 +0 +0 +83 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar28% + + +1 +148 +0 +1 +84 +0 + + +2 +239 +0 +0 +85 +0 + + +6 +849 +0 +0 +86 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar29% + + +1 +149 +0 +1 +87 +0 + + +2 +240 +0 +0 +88 +0 + + +6 +850 +0 +0 +89 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar30% + + +1 +150 +0 +1 +90 +0 + + +2 +241 +0 +0 +91 +0 + + +6 +851 +0 +0 +92 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar31% + + +1 +151 +0 +1 +93 +0 + + +2 +242 +0 +0 +94 +0 + + +6 +852 +0 +0 +95 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar32% + + +1 +152 +0 +1 +96 +0 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +User Information +Enter your user information and click Next to continue. +&Next > +< &Back +&Cancel +&Help + + +Name: +%RegOwner% +... +#### + +Company: +%RegOrganization% +... +#### + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +用户信息 +请输入您的用户信息,并单击“下一步”继续。 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) + + +名称: +%RegOwner% +... +#### + +公司: +%RegOrganization% +... +#### + + + + + + +110 +Select Install Folder +2 +Select Install Folder +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +%AppFolder% + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +203 +1 +1 +1 +0 + + +2 +211 +1 +1 +2 +0 + + +6 +801 +1 +1 +3 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%AppFolder% + + +1 +110 +1 +1 +4 +0 + + +2 +208 +1 +1 +5 +0 + + +2 +207 +1 +1 +6 +0 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Installation Folder +Where would you like %ProductName% to be installed? +&Next > +< &Back +&Cancel +&Help +C&hange... +%AppFolder% +The software will be installed in the folder listed below. To select a different location, either type in a new path, or click Change to browse for an existing folder. +Install %ProductName% to: +Space required: %SpaceRequired% +Space available on selected drive: %SpaceAvailable% + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +安装文件夹 +您想将 %ProductName% 安装到何处? +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +更改(&H)... +%AppFolder% +软件将被安装到以下列出的文件夹中。要选择不同的位置,键入新的路径,或单击“更改”浏览现有的文件夹。 +将 %ProductName% 安装到: +所需空间: %SpaceRequired% +选定驱动器的可用空间: %SpaceAvailable% + + + + + +115 +Select Shortcut Folder +2 +Select Shortcut Folder +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +%AppShortcutFolderName% + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +203 +1 +1 +0 +0 + + +2 +211 +1 +1 +1 +0 + + +4 +501 +1 +1 +2 +0 +1 +1 + +4 +1 + + +5 +600 +1 +1 +35 +1 +600 +601 + + +5 +601 +1 +1 +40 +0 +600 +601 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Shortcut Folder +Where would you like the shortcuts to be installed? +&Next > +< &Back +&Cancel +&Help +The shortcut icons will be created in the folder indicated below. If you don't want to use the default folder, you can either type a new name, or select an existing folder from the list. +Shortcut Folder: +Install shortcuts for current user only +Make shortcuts available to all users +%AppShortcutFolderName% + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +快捷方式文件夹 +您想将快捷方式安装到何处? +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +快捷方式图标将在下面指出的文件夹中创建。如果您不想使用默认文件夹,您可以键入新的名称,或从列表中选择现有的文件夹。 +快捷方式文件夹: +只对当前用户安装快捷方式 +使快捷方式对所有用户都可用 +%AppShortcutFolderName% + + + + + +100 +Ready to Install +2 +Ready to Install +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +200 +1 +1 +0 +0 + + +2 +300 +0 +1 +1 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Ready to Install +You are now ready to install %ProductName% %ProductVer% +&Next > +< &Back +&Cancel +&Help +The installer now has enough information to install %ProductName% on your computer. + + +The following settings will be used: + +Install folder: %AppFolder% + +Shortcut folder: %AppShortcutFolderName% + + +Please click Next to proceed with the installation. +Title + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +准备安装 +现在您正准备安装 %ProductName% %ProductVer% +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +现在安装程序已有足够的信息将 %ProductName% 安装到您的计算机中。 + + +将使用以下设置: + +安装文件夹: %AppFolder% + +快捷方式文件夹: %AppShortcutFolderName% + + +请单击“下一步”继续安装。 +标题 + + + + + + +1 + + +130 +One Progress Bar (While Installing) +2 +One Progress Bar (While Installing) +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +1 + + +On Preload + + + + + + +On Progress +number e_Stage, string e_CurrentItemText, number e_CurrentItemPct, number e_StagePct + + + + + +On Cancel + + + + + + + + +1 +102 +1 +1 +78 +1 + + +2 +203 +1 +1 +1 +0 + + +2 +211 +1 +1 +2 +0 + + +2 +212 +1 +1 +3 +0 + + +7 +900 +1 +1 +4 + +0 +100 +1 + + +2 +213 +0 +1 +2 +0 + + +2 +214 +0 +1 +3 +0 + + +7 +901 +0 +1 +4 + +0 +100 +0 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Installing %ProductName% +Please wait... +&Cancel + + + + +Progress Two +Performing Actions... + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +正在安装 %ProductName% +请稍候... +取消(&C) + + + + +进程二 +正在执行动作... + + + + + + + + + +100 +Finished Install +1 +Finished Install +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +0 +-9 +1 + + +2 +200 +1 +1 +0 +0 + + +2 +300 +1 +1 +1 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Installation Finished +The installation has completed successfully. +&Finish +< &Back +&Cancel +&Help +The %ProductName% %ProductVer% installation is complete. + +Thank you for choosing %ProductName%! + +Please click Finish to exit this installer. + +Installation Successful + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +安装已完成 +安装已成功完成。 +完成(&F) +< 返回(&B) +取消(&C) +帮助(&H) +%ProductName% %ProductVer% 安装已完成。 + +感谢您选择 %ProductName%! + +请单击“完成”退出该安装程序。 + +安装成功 + + + + + + + + +List 1 + +All + + + + + +1 +uninstall.xml +%AppFolder%\Uninstall +%AppFolder%\uninstall.exe +1 +0 +0 + +0 +0 +1 +008080 +b4c2e3 +5971b6 + +0 + +0 +0 +%ProductName% Uninstall + + +Arial +0 +-37 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +v%ProductVer% + + +Arial +0 +-18 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +
%Copyright% %CompanyName%. All rights reserved. %CompanyURL%
+ + +Arial +0 +-16 +400 +0 +0 +0 +1 + + +ffffff +000000 +0 +1 +
+1 +1 +1 +1 +Microsoft.DesktopAppInstaller +%ProductName% +1 +%AppFolder%\appinstaller.exe +1 +%CompanyName% +%CompanyURL% +%CompanyName% Support Department +%CompanyURL% +%ProductVer% + + + + + +%AppFolder% + + +1 +Uninstall +Removes %ProductName% from your computer. +1 +%AppFolder%\uninstall_icon.ico +0 +1 +%TempFolder%\%ProductName% Uninstall Log.txt +0 +0 +1 + + +100 +Welcome to Uninstall +1 +Welcome to Uninstall +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +200 +1 +1 +1 +0 + + +2 +300 +1 +1 +0 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Uninstaller +Welcome +Welcome to the uninstaller for %ProductName% %ProductVer% +&Next > +< &Back +&Cancel +&Help +This program will uninstall %ProductName% %ProductVer%. + +If %ProductName% is currently running, please close it before proceeding with the uninstallation. + +Otherwise, click Next to continue. + +Uninstall %ProductName% + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 卸载程序 +欢迎 +欢迎使用 %ProductName% %ProductVer% 卸载程序 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +该程序将卸载 %ProductName% %ProductVer%。 + +如果 %ProductName% 当前正在运行,继续卸载之前请将其关闭。 + +否则,请单击“下一步”继续。 + +卸载 %ProductName% + + + + + + +1 + + +130 +One Progress Bar (While Uninstalling) +2 +One Progress Bar (While Uninstalling) +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +1 + + +On Preload + + + + + + +On Progress +number e_Stage, string e_CurrentItemText, number e_CurrentItemPct, number e_StagePct + + + + + +On Cancel + + + + + + + + +1 +102 +1 +1 +78 +1 + + +2 +203 +1 +1 +1 +0 + + +2 +211 +1 +1 +2 +0 + + +2 +212 +1 +1 +3 +0 + + +7 +900 +1 +1 +4 + +0 +100 +1 + + +2 +213 +0 +1 +2 +0 + + +2 +214 +0 +1 +3 +0 + + +7 +901 +0 +1 +4 + +0 +100 +0 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Uninstaller +Removing %ProductName% +Please wait... +&Cancel + + + + +Progress Two +Performing Actions... + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 卸载程序 +正在移除 %ProductName% +请稍候... +取消(&C) + + + + +进程二 +正在执行动作... + + + + + + + + + +100 +Finished Uninstall +1 +Finished Uninstall +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +0 +-9 +1 + + +2 +200 +1 +1 +0 +0 + + +2 +300 +1 +1 +1 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Uninstaller +Uninstallation Finished +The uninstallation has completed successfully. +&Finish +< &Back +&Cancel +&Help +%ProductName% %ProductVer% has been uninstalled. + +Please click Finish to exit. + +Uninstallation Successful + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 卸载程序 +卸载已完成 +卸载已成功完成。 +完成(&F) +< 返回(&B) +取消(&C) +帮助(&H) +%ProductName% %ProductVer% 已被卸载。 + +请单击“完成”退出。 + +卸载成功 + + + + + + + +在启动时 + + + + + + +On Post Uninstall + + + + + + +
+ + +1 +%TempFolder%\%ProductName% Setup Log.txt +0 +1 + +0 +0 +0 +0 +2 + +0 +0 +1 +008080 +b4c2e3 +5971b6 + +1 +%TempLaunchFolder%\main.ico +0 +0 +%ProductName% + + +Arial +0 +-37 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +v%ProductVer% + + +Arial +0 +-18 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +
%Copyright%. All rights reserved. %CompanyURL%
+ + +Arial +0 +-16 +400 +0 +0 +0 +1 + + +ffffff +000000 +0 +1 +
+ +0 +0 +30 +30 +1 +1767105338 +0 +0 +1 +1 +2 +1 +0 +03F9811E-4657-4757-A24D-570C64F8ABB6 +0 +%CompanyName% +%CompanyURL% + + + + + +32768 +65535 +65535 +65535 +0 +0 +0 +0 +0 +0 +65535 +65535 +65535 +65535 +65535 +65535 + +0 +0 +0 +0 +1 +0 + + +Developer +New Project + + + +Copyright 2025 + + +9.5.3.0 +9.5.3.0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\shared + +0 + + + + + + +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\appinstaller\res\icons\main.ico +1 +0 + +All + + + +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\others\Wwalczyszyn-Android-Style-Trash-empty.ico +1 +0 + +All + + + + + +全局函数 + + + + + + +在安装后 + + + + + + +
+ + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + + + +%ProductName% +Desktop App Installer +1 + + +%CompanyName% +Windows Modern +1 + + +%ProductVer% +0.1.0.0 +1 + + +%Copyright% +Copyright (C)2025 %CompanyName% +1 + + +%CompanyURL% + +1 + + +%WindowTitle% +%ProductName% Setup +1 + + +%WindowTitleUninstall% +%ProductName% Uninstaller +1 + + +%AppFolder% +%ProgramFilesFolder%\%ProductName% +2 + + +%AppShortcutFolderName% +%ProductName% +2 + + + + +Default + + +0 + + +0 +setup.exe +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Generated +0 +0 +0 +0 +0 +0 + +1 + + + + + +1 + + +0 + + + + + +1 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\appinstaller\res\icons\main.ico +9.5.3.0 +9.5.3.0 +Indigo Rose Corporation +Setup Factory Runtime +Created with Setup Factory +sf_rt +Setup Application +Setup Engine Copyright ?1992-2019 Indigo Rose Corporation +Setup Factory is a trademark of Indigo Rose Corporation + + +0 + + + + + + +#SUFDIR#\Includes\Scripts\_SUF70_Global_Functions.lua +1 + +All + + + +
\ No newline at end of file diff --git a/others/Autosave/autosave_2025-11-30_22-50-06.suf b/others/Autosave/autosave_2025-11-30_22-50-06.suf new file mode 100644 index 0000000..b0a8605 --- /dev/null +++ b/others/Autosave/autosave_2025-11-30_22-50-06.suf @@ -0,0 +1,5993 @@ + + +{AFB904C4-C255-4540-B97E-A75A34F1FFB0} +9.5.3.0 + + + +1 + +*.* +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\shared +* +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +1 + +1 +1 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\appinstaller.exe +appinstaller.exe +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +exe +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +1 +0 +0 +0 +0 +0 + +App Installer + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\certmgr.dll +certmgr.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\notice.dll +notice.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\pkgmgr.dll +pkgmgr.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\pkgread.dll +pkgread.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\PriFileFormat.dll +PriFileFormat.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\priformatcli.dll +priformatcli.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\reslib.dll +reslib.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\settings.exe +settings.exe +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +exe +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +1 +0 +0 +0 +0 +0 + +Settings + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\others\uninstall_icon.ico +uninstall_icon.ico +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\others +ico +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + + + + +100 +Welcome to Setup +1 +Welcome to Setup +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +77 +1 + + +1 +102 +1 +1 +78 +1 + + +2 +200 +1 +1 +1 +0 + + +2 +300 +1 +1 +0 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Welcome +Welcome to the installer for %ProductName% %ProductVer% +&Next > +< &Back +&Cancel +&Help +Welcome to the installer for %ProductName% %ProductVer%. + +It is strongly recommended that you exit all Windows programs before continuing with this installation. + +If you have any other programs running, please click Cancel, close the programs, and run this setup again. + +Otherwise, click Next to continue. + +Welcome + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +欢迎 +欢迎使用 %ProductName% %ProductVer% 安装程序 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +欢迎使用 %ProductName% %ProductVer% 安装程序。 + +强烈建议您在继续该安装之前,退出所有 Windows 程序。 + +如果您有任何其他程序正在运行,请单击“取消”,关闭程序,然后再次运行该安装程序。 + +否则,请单击“下一步”继续。 + +欢迎 + + + + + +125 +License Agreement +2 +License Agreement +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +1 + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +3 +400 +1 +1 +0 +0 +0 +1 +0 +0 + +1 +1 + + + +5 +602 +1 +1 +35 +1 +602 +603 + + +5 +603 +1 +1 +40 +0 +602 +603 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +License Agreement +Please read the following license agreement carefully. +&Next > +< &Back +&Cancel +&Help +Insert your license agreement text here... +I agree to the terms of this license agreement +I do not agree to the terms of this license agreement + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +许可协议 +请仔细阅读以下许可协议。 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +在此插入您的许可协议文本... +我同意该许可协议的条款 +我不同意该许可协议的条款 + + + + + + +120 +User Information +2 +User Information +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +2 +0 +1 + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +98 +1 + + +1 +101 +1 +1 +99 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +203 +1 +1 +0 +0 + + +2 +204 +1 +1 +97 +0 + + +2 +211 +1 +1 +1 +0 + + +6 +821 +1 +1 +2 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%UserName% + + +1 +121 +0 +1 +3 +0 + + +2 +212 +1 +1 +4 +0 + + +6 +822 +1 +1 +5 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%UserCompany% + + +1 +122 +0 +1 +6 +0 + + +2 +213 +0 +0 +7 +0 + + +6 +823 +0 +0 +8 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar03% + + +1 +123 +0 +1 +9 +0 + + +2 +214 +0 +0 +10 +0 + + +6 +824 +0 +0 +11 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar04% + + +1 +124 +0 +1 +12 +0 + + +2 +215 +0 +0 +13 +0 + + +6 +825 +0 +0 +14 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar05% + + +1 +125 +0 +1 +15 +0 + + +2 +216 +0 +0 +16 +0 + + +6 +826 +0 +0 +17 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar06% + + +1 +126 +0 +1 +18 +0 + + +2 +217 +0 +0 +19 +0 + + +6 +827 +0 +0 +20 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar07% + + +1 +127 +0 +1 +21 +0 + + +2 +218 +0 +0 +22 +0 + + +6 +828 +0 +0 +23 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar08% + + +1 +128 +0 +1 +24 +0 + + +2 +219 +0 +0 +25 +0 + + +6 +829 +0 +0 +26 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar09% + + +1 +129 +0 +1 +27 +0 + + +2 +220 +0 +0 +28 +0 + + +6 +830 +0 +0 +29 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar10% + + +1 +130 +0 +1 +30 +0 + + +2 +221 +0 +0 +31 +0 + + +6 +831 +0 +0 +32 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar11% + + +1 +131 +0 +1 +33 +0 + + +2 +222 +0 +0 +34 +0 + + +6 +832 +0 +0 +35 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar12% + + +1 +132 +0 +1 +36 +0 + + +2 +223 +0 +0 +37 +0 + + +6 +833 +0 +0 +38 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar13% + + +1 +133 +0 +1 +39 +0 + + +2 +224 +0 +0 +40 +0 + + +6 +834 +0 +0 +41 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar14% + + +1 +134 +0 +1 +42 +0 + + +2 +225 +0 +0 +43 +0 + + +6 +835 +0 +0 +44 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar15% + + +1 +135 +0 +1 +45 +0 + + +2 +226 +0 +0 +46 +0 + + +6 +836 +0 +0 +47 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar16% + + +1 +136 +0 +1 +48 +0 + + +2 +227 +0 +0 +49 +0 + + +6 +837 +0 +0 +50 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar17% + + +1 +137 +0 +1 +51 +0 + + +2 +228 +0 +0 +52 +0 + + +6 +838 +0 +0 +53 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar18% + + +1 +138 +0 +1 +54 +0 + + +2 +229 +0 +0 +55 +0 + + +6 +839 +0 +0 +56 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar19% + + +1 +139 +0 +1 +57 +0 + + +2 +230 +0 +0 +58 +0 + + +6 +840 +0 +0 +59 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar20% + + +1 +140 +0 +1 +60 +0 + + +2 +231 +0 +0 +61 +0 + + +6 +841 +0 +0 +62 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar21% + + +1 +141 +0 +1 +63 +0 + + +2 +232 +0 +0 +64 +0 + + +6 +842 +0 +0 +65 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar22% + + +1 +142 +0 +1 +66 +0 + + +2 +233 +0 +0 +67 +0 + + +6 +843 +0 +0 +68 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar23% + + +1 +143 +0 +1 +69 +0 + + +2 +234 +0 +0 +70 +0 + + +6 +844 +0 +0 +71 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar24% + + +1 +144 +0 +1 +72 +0 + + +2 +235 +0 +0 +73 +0 + + +6 +845 +0 +0 +74 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar25% + + +1 +145 +0 +1 +75 +0 + + +2 +236 +0 +0 +76 +0 + + +6 +846 +0 +0 +77 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar26% + + +1 +146 +0 +1 +78 +0 + + +2 +237 +0 +0 +79 +0 + + +6 +847 +0 +0 +80 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar27% + + +1 +147 +0 +1 +81 +0 + + +2 +238 +0 +0 +82 +0 + + +6 +848 +0 +0 +83 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar28% + + +1 +148 +0 +1 +84 +0 + + +2 +239 +0 +0 +85 +0 + + +6 +849 +0 +0 +86 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar29% + + +1 +149 +0 +1 +87 +0 + + +2 +240 +0 +0 +88 +0 + + +6 +850 +0 +0 +89 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar30% + + +1 +150 +0 +1 +90 +0 + + +2 +241 +0 +0 +91 +0 + + +6 +851 +0 +0 +92 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar31% + + +1 +151 +0 +1 +93 +0 + + +2 +242 +0 +0 +94 +0 + + +6 +852 +0 +0 +95 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%EditVar32% + + +1 +152 +0 +1 +96 +0 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +User Information +Enter your user information and click Next to continue. +&Next > +< &Back +&Cancel +&Help + + +Name: +%RegOwner% +... +#### + +Company: +%RegOrganization% +... +#### + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +用户信息 +请输入您的用户信息,并单击“下一步”继续。 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) + + +名称: +%RegOwner% +... +#### + +公司: +%RegOrganization% +... +#### + + + + + + +110 +Select Install Folder +2 +Select Install Folder +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +%AppFolder% + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +203 +1 +1 +1 +0 + + +2 +211 +1 +1 +2 +0 + + +6 +801 +1 +1 +3 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%AppFolder% + + +1 +110 +1 +1 +4 +0 + + +2 +208 +1 +1 +5 +0 + + +2 +207 +1 +1 +6 +0 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Installation Folder +Where would you like %ProductName% to be installed? +&Next > +< &Back +&Cancel +&Help +C&hange... +%AppFolder% +The software will be installed in the folder listed below. To select a different location, either type in a new path, or click Change to browse for an existing folder. +Install %ProductName% to: +Space required: %SpaceRequired% +Space available on selected drive: %SpaceAvailable% + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +安装文件夹 +您想将 %ProductName% 安装到何处? +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +更改(&H)... +%AppFolder% +软件将被安装到以下列出的文件夹中。要选择不同的位置,键入新的路径,或单击“更改”浏览现有的文件夹。 +将 %ProductName% 安装到: +所需空间: %SpaceRequired% +选定驱动器的可用空间: %SpaceAvailable% + + + + + +115 +Select Shortcut Folder +2 +Select Shortcut Folder +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +%AppShortcutFolderName% + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +203 +1 +1 +0 +0 + + +2 +211 +1 +1 +1 +0 + + +4 +501 +1 +1 +2 +0 +1 +1 + +4 +1 + + +5 +600 +1 +1 +35 +1 +600 +601 + + +5 +601 +1 +1 +40 +0 +600 +601 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Shortcut Folder +Where would you like the shortcuts to be installed? +&Next > +< &Back +&Cancel +&Help +The shortcut icons will be created in the folder indicated below. If you don't want to use the default folder, you can either type a new name, or select an existing folder from the list. +Shortcut Folder: +Install shortcuts for current user only +Make shortcuts available to all users +%AppShortcutFolderName% + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +快捷方式文件夹 +您想将快捷方式安装到何处? +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +快捷方式图标将在下面指出的文件夹中创建。如果您不想使用默认文件夹,您可以键入新的名称,或从列表中选择现有的文件夹。 +快捷方式文件夹: +只对当前用户安装快捷方式 +使快捷方式对所有用户都可用 +%AppShortcutFolderName% + + + + + +100 +Ready to Install +2 +Ready to Install +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +200 +1 +1 +0 +0 + + +2 +300 +0 +1 +1 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Ready to Install +You are now ready to install %ProductName% %ProductVer% +&Next > +< &Back +&Cancel +&Help +The installer now has enough information to install %ProductName% on your computer. + + +The following settings will be used: + +Install folder: %AppFolder% + +Shortcut folder: %AppShortcutFolderName% + + +Please click Next to proceed with the installation. +Title + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +准备安装 +现在您正准备安装 %ProductName% %ProductVer% +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +现在安装程序已有足够的信息将 %ProductName% 安装到您的计算机中。 + + +将使用以下设置: + +安装文件夹: %AppFolder% + +快捷方式文件夹: %AppShortcutFolderName% + + +请单击“下一步”继续安装。 +标题 + + + + + + +1 + + +130 +One Progress Bar (While Installing) +2 +One Progress Bar (While Installing) +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +1 + + +On Preload + + + + + + +On Progress +number e_Stage, string e_CurrentItemText, number e_CurrentItemPct, number e_StagePct + + + + + +On Cancel + + + + + + + + +1 +102 +1 +1 +78 +1 + + +2 +203 +1 +1 +1 +0 + + +2 +211 +1 +1 +2 +0 + + +2 +212 +1 +1 +3 +0 + + +7 +900 +1 +1 +4 + +0 +100 +1 + + +2 +213 +0 +1 +2 +0 + + +2 +214 +0 +1 +3 +0 + + +7 +901 +0 +1 +4 + +0 +100 +0 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Installing %ProductName% +Please wait... +&Cancel + + + + +Progress Two +Performing Actions... + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +正在安装 %ProductName% +请稍候... +取消(&C) + + + + +进程二 +正在执行动作... + + + + + + + + + +100 +Finished Install +1 +Finished Install +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +0 +-9 +1 + + +2 +200 +1 +1 +0 +0 + + +2 +300 +1 +1 +1 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Installation Finished +The installation has completed successfully. +&Finish +< &Back +&Cancel +&Help +The %ProductName% %ProductVer% installation is complete. + +Thank you for choosing %ProductName%! + +Please click Finish to exit this installer. + +Installation Successful + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +安装已完成 +安装已成功完成。 +完成(&F) +< 返回(&B) +取消(&C) +帮助(&H) +%ProductName% %ProductVer% 安装已完成。 + +感谢您选择 %ProductName%! + +请单击“完成”退出该安装程序。 + +安装成功 + + + + + + + + +List 1 + +All + + + + + +1 +uninstall.xml +%AppFolder%\Uninstall +%AppFolder%\uninstall.exe +1 +0 +0 + +0 +0 +1 +008080 +b4c2e3 +5971b6 + +0 + +0 +0 +%ProductName% Uninstall + + +Arial +0 +-37 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +v%ProductVer% + + +Arial +0 +-18 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +
%Copyright% %CompanyName%. All rights reserved. %CompanyURL%
+ + +Arial +0 +-16 +400 +0 +0 +0 +1 + + +ffffff +000000 +0 +1 +
+1 +1 +1 +1 +Microsoft.DesktopAppInstaller +%ProductName% +1 +%AppFolder%\appinstaller.exe +1 +%CompanyName% +%CompanyURL% +%CompanyName% Support Department +%CompanyURL% +%ProductVer% + + + + + +%AppFolder% + + +1 +Uninstall +Removes %ProductName% from your computer. +1 +%AppFolder%\uninstall_icon.ico +0 +1 +%TempFolder%\%ProductName% Uninstall Log.txt +0 +0 +1 + + +100 +Welcome to Uninstall +1 +Welcome to Uninstall +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +200 +1 +1 +1 +0 + + +2 +300 +1 +1 +0 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Uninstaller +Welcome +Welcome to the uninstaller for %ProductName% %ProductVer% +&Next > +< &Back +&Cancel +&Help +This program will uninstall %ProductName% %ProductVer%. + +If %ProductName% is currently running, please close it before proceeding with the uninstallation. + +Otherwise, click Next to continue. + +Uninstall %ProductName% + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 卸载程序 +欢迎 +欢迎使用 %ProductName% %ProductVer% 卸载程序 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +该程序将卸载 %ProductName% %ProductVer%。 + +如果 %ProductName% 当前正在运行,继续卸载之前请将其关闭。 + +否则,请单击“下一步”继续。 + +卸载 %ProductName% + + + + + + +1 + + +130 +One Progress Bar (While Uninstalling) +2 +One Progress Bar (While Uninstalling) +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +1 + + +On Preload + + + + + + +On Progress +number e_Stage, string e_CurrentItemText, number e_CurrentItemPct, number e_StagePct + + + + + +On Cancel + + + + + + + + +1 +102 +1 +1 +78 +1 + + +2 +203 +1 +1 +1 +0 + + +2 +211 +1 +1 +2 +0 + + +2 +212 +1 +1 +3 +0 + + +7 +900 +1 +1 +4 + +0 +100 +1 + + +2 +213 +0 +1 +2 +0 + + +2 +214 +0 +1 +3 +0 + + +7 +901 +0 +1 +4 + +0 +100 +0 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Uninstaller +Removing %ProductName% +Please wait... +&Cancel + + + + +Progress Two +Performing Actions... + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 卸载程序 +正在移除 %ProductName% +请稍候... +取消(&C) + + + + +进程二 +正在执行动作... + + + + + + + + + +100 +Finished Uninstall +1 +Finished Uninstall +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +0 +-9 +1 + + +2 +200 +1 +1 +0 +0 + + +2 +300 +1 +1 +1 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Uninstaller +Uninstallation Finished +The uninstallation has completed successfully. +&Finish +< &Back +&Cancel +&Help +%ProductName% %ProductVer% has been uninstalled. + +Please click Finish to exit. + +Uninstallation Successful + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 卸载程序 +卸载已完成 +卸载已成功完成。 +完成(&F) +< 返回(&B) +取消(&C) +帮助(&H) +%ProductName% %ProductVer% 已被卸载。 + +请单击“完成”退出。 + +卸载成功 + + + + + + + +在启动时 + + + + + + +On Post Uninstall + + + + + + +
+ + +1 +%TempFolder%\%ProductName% Setup Log.txt +0 +1 + +0 +0 +0 +0 +2 + +0 +0 +1 +008080 +b4c2e3 +5971b6 + +1 +%TempLaunchFolder%\main.ico +0 +0 +%ProductName% + + +Arial +0 +-37 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +v%ProductVer% + + +Arial +0 +-18 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +
%Copyright%. All rights reserved. %CompanyURL%
+ + +Arial +0 +-16 +400 +0 +0 +0 +1 + + +ffffff +000000 +0 +1 +
+ +0 +0 +30 +30 +1 +1767105338 +0 +0 +1 +1 +2 +1 +0 +03F9811E-4657-4757-A24D-570C64F8ABB6 +0 +%CompanyName% +%CompanyURL% + + + + + +32768 +65535 +65535 +65535 +0 +0 +0 +0 +0 +0 +65535 +65535 +65535 +65535 +65535 +65535 + +0 +0 +0 +0 +1 +0 + + +Developer +New Project + + + +Copyright 2025 + + +9.5.3.0 +9.5.3.0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\shared + +0 + + + + + + +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\appinstaller\res\icons\main.ico +1 +0 + +All + + + + + +全局函数 + + + + + + +在安装后 + + + + + + +
+ + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + + + +%ProductName% +Desktop App Installer +1 + + +%CompanyName% +Windows Modern +1 + + +%ProductVer% +0.1.0.0 +1 + + +%Copyright% +Copyright (C)2025 %CompanyName% +1 + + +%CompanyURL% + +1 + + +%WindowTitle% +%ProductName% Setup +1 + + +%WindowTitleUninstall% +%ProductName% Uninstaller +1 + + +%AppFolder% +%ProgramFilesFolder%\%ProductName% +2 + + +%AppShortcutFolderName% +%ProductName% +2 + + + + +Default + + +0 + + +0 +setup.exe +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Generated +0 +0 +0 +0 +0 +0 + +1 + + + + + +1 + + +0 + + + + + +1 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\appinstaller\res\icons\main.ico +9.5.3.0 +9.5.3.0 +Indigo Rose Corporation +Setup Factory Runtime +Created with Setup Factory +sf_rt +Setup Application +Setup Engine Copyright ?1992-2019 Indigo Rose Corporation +Setup Factory is a trademark of Indigo Rose Corporation + + +0 + + + + + + +#SUFDIR#\Includes\Scripts\_SUF70_Global_Functions.lua +1 + +All + + + +
\ No newline at end of file diff --git a/others/Autosave/autosave_2025-11-30_22-53-35.suf b/others/Autosave/autosave_2025-11-30_22-53-35.suf new file mode 100644 index 0000000..58c05dd --- /dev/null +++ b/others/Autosave/autosave_2025-11-30_22-53-35.suf @@ -0,0 +1,4577 @@ + + +{AFB904C4-C255-4540-B97E-A75A34F1FFB0} +9.5.3.0 + + + +1 + +*.* +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\shared +* +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +1 + +1 +1 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\appinstaller.exe +appinstaller.exe +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +exe +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +1 +0 +0 +0 +0 +0 + +App Installer + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\certmgr.dll +certmgr.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\notice.dll +notice.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\pkgmgr.dll +pkgmgr.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\pkgread.dll +pkgread.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\PriFileFormat.dll +PriFileFormat.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\priformatcli.dll +priformatcli.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\reslib.dll +reslib.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\settings.exe +settings.exe +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +exe +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +1 +0 +0 +0 +0 +0 + +Settings + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\others\uninstall_icon.ico +uninstall_icon.ico +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\others +ico +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + + + + +100 +Welcome to Setup +1 +Welcome to Setup +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +77 +1 + + +1 +102 +1 +1 +78 +1 + + +2 +200 +1 +1 +1 +0 + + +2 +300 +1 +1 +0 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Welcome +Welcome to the installer for %ProductName% %ProductVer% +&Next > +< &Back +&Cancel +&Help +Welcome to the installer for %ProductName% %ProductVer%. + +It is strongly recommended that you exit all Windows programs before continuing with this installation. + +If you have any other programs running, please click Cancel, close the programs, and run this setup again. + +Otherwise, click Next to continue. + +Welcome + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +欢迎 +欢迎使用 %ProductName% %ProductVer% 安装程序 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +欢迎使用 %ProductName% %ProductVer% 安装程序。 + +强烈建议您在继续该安装之前,退出所有 Windows 程序。 + +如果您有任何其他程序正在运行,请单击“取消”,关闭程序,然后再次运行该安装程序。 + +否则,请单击“下一步”继续。 + +欢迎 + + + + + +125 +License Agreement +2 +License Agreement +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +1 + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +3 +400 +1 +1 +0 +0 +0 +1 +0 +0 + +1 +1 + + + +5 +602 +1 +1 +35 +1 +602 +603 + + +5 +603 +1 +1 +40 +0 +602 +603 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +License Agreement +Please read the following license agreement carefully. +&Next > +< &Back +&Cancel +&Help +Insert your license agreement text here... +I agree to the terms of this license agreement +I do not agree to the terms of this license agreement + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +许可协议 +请仔细阅读以下许可协议。 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +在此插入您的许可协议文本... +我同意该许可协议的条款 +我不同意该许可协议的条款 + + + + + + +110 +Select Install Folder +2 +Select Install Folder +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +%AppFolder% + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +203 +1 +1 +1 +0 + + +2 +211 +1 +1 +2 +0 + + +6 +801 +1 +1 +3 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%AppFolder% + + +1 +110 +1 +1 +4 +0 + + +2 +208 +1 +1 +5 +0 + + +2 +207 +1 +1 +6 +0 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Installation Folder +Where would you like %ProductName% to be installed? +&Next > +< &Back +&Cancel +&Help +C&hange... +%AppFolder% +The software will be installed in the folder listed below. To select a different location, either type in a new path, or click Change to browse for an existing folder. +Install %ProductName% to: +Space required: %SpaceRequired% +Space available on selected drive: %SpaceAvailable% + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +安装文件夹 +您想将 %ProductName% 安装到何处? +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +更改(&H)... +%AppFolder% +软件将被安装到以下列出的文件夹中。要选择不同的位置,键入新的路径,或单击“更改”浏览现有的文件夹。 +将 %ProductName% 安装到: +所需空间: %SpaceRequired% +选定驱动器的可用空间: %SpaceAvailable% + + + + + +115 +Select Shortcut Folder +2 +Select Shortcut Folder +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +%AppShortcutFolderName% + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +203 +1 +1 +0 +0 + + +2 +211 +1 +1 +1 +0 + + +4 +501 +1 +1 +2 +0 +1 +1 + +4 +1 + + +5 +600 +1 +1 +35 +1 +600 +601 + + +5 +601 +1 +1 +40 +0 +600 +601 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Shortcut Folder +Where would you like the shortcuts to be installed? +&Next > +< &Back +&Cancel +&Help +The shortcut icons will be created in the folder indicated below. If you don't want to use the default folder, you can either type a new name, or select an existing folder from the list. +Shortcut Folder: +Install shortcuts for current user only +Make shortcuts available to all users +%AppShortcutFolderName% + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +快捷方式文件夹 +您想将快捷方式安装到何处? +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +快捷方式图标将在下面指出的文件夹中创建。如果您不想使用默认文件夹,您可以键入新的名称,或从列表中选择现有的文件夹。 +快捷方式文件夹: +只对当前用户安装快捷方式 +使快捷方式对所有用户都可用 +%AppShortcutFolderName% + + + + + +100 +Ready to Install +2 +Ready to Install +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +200 +1 +1 +0 +0 + + +2 +300 +0 +1 +1 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Ready to Install +You are now ready to install %ProductName% %ProductVer% +&Next > +< &Back +&Cancel +&Help +The installer now has enough information to install %ProductName% on your computer. + + +The following settings will be used: + +Install folder: %AppFolder% + +Shortcut folder: %AppShortcutFolderName% + + +Please click Next to proceed with the installation. +Title + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +准备安装 +现在您正准备安装 %ProductName% %ProductVer% +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +现在安装程序已有足够的信息将 %ProductName% 安装到您的计算机中。 + + +将使用以下设置: + +安装文件夹: %AppFolder% + +快捷方式文件夹: %AppShortcutFolderName% + + +请单击“下一步”继续安装。 +标题 + + + + + + +1 + + +130 +One Progress Bar (While Installing) +2 +One Progress Bar (While Installing) +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +1 + + +On Preload + + + + + + +On Progress +number e_Stage, string e_CurrentItemText, number e_CurrentItemPct, number e_StagePct + + + + + +On Cancel + + + + + + + + +1 +102 +1 +1 +78 +1 + + +2 +203 +1 +1 +1 +0 + + +2 +211 +1 +1 +2 +0 + + +2 +212 +1 +1 +3 +0 + + +7 +900 +1 +1 +4 + +0 +100 +1 + + +2 +213 +0 +1 +2 +0 + + +2 +214 +0 +1 +3 +0 + + +7 +901 +0 +1 +4 + +0 +100 +0 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Installing %ProductName% +Please wait... +&Cancel + + + + +Progress Two +Performing Actions... + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +正在安装 %ProductName% +请稍候... +取消(&C) + + + + +进程二 +正在执行动作... + + + + + + + + + +100 +Finished Install +1 +Finished Install +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +0 +-9 +1 + + +2 +200 +1 +1 +0 +0 + + +2 +300 +1 +1 +1 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Installation Finished +The installation has completed successfully. +&Finish +< &Back +&Cancel +&Help +The %ProductName% %ProductVer% installation is complete. + +Thank you for choosing %ProductName%! + +Please click Finish to exit this installer. + +Installation Successful + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +安装已完成 +安装已成功完成。 +完成(&F) +< 返回(&B) +取消(&C) +帮助(&H) +%ProductName% %ProductVer% 安装已完成。 + +感谢您选择 %ProductName%! + +请单击“完成”退出该安装程序。 + +安装成功 + + + + + + + + +List 1 + +All + + + + + +1 +uninstall.xml +%AppFolder%\Uninstall +%AppFolder%\uninstall.exe +1 +0 +0 + +0 +0 +1 +008080 +b4c2e3 +5971b6 + +0 + +0 +0 +%ProductName% Uninstall + + +Arial +0 +-37 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +v%ProductVer% + + +Arial +0 +-18 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +
%Copyright% %CompanyName%. All rights reserved. %CompanyURL%
+ + +Arial +0 +-16 +400 +0 +0 +0 +1 + + +ffffff +000000 +0 +1 +
+1 +1 +1 +1 +Microsoft.DesktopAppInstaller +%ProductName% +1 +%AppFolder%\appinstaller.exe +1 +%CompanyName% +%CompanyURL% +%CompanyName% Support Department +%CompanyURL% +%ProductVer% + + + + + +%AppFolder% + + +1 +Uninstall +Removes %ProductName% from your computer. +1 +%AppFolder%\uninstall_icon.ico +0 +1 +%TempFolder%\%ProductName% Uninstall Log.txt +0 +0 +1 + + +100 +Welcome to Uninstall +1 +Welcome to Uninstall +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +200 +1 +1 +1 +0 + + +2 +300 +1 +1 +0 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Uninstaller +Welcome +Welcome to the uninstaller for %ProductName% %ProductVer% +&Next > +< &Back +&Cancel +&Help +This program will uninstall %ProductName% %ProductVer%. + +If %ProductName% is currently running, please close it before proceeding with the uninstallation. + +Otherwise, click Next to continue. + +Uninstall %ProductName% + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 卸载程序 +欢迎 +欢迎使用 %ProductName% %ProductVer% 卸载程序 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +该程序将卸载 %ProductName% %ProductVer%。 + +如果 %ProductName% 当前正在运行,继续卸载之前请将其关闭。 + +否则,请单击“下一步”继续。 + +卸载 %ProductName% + + + + + + +1 + + +130 +One Progress Bar (While Uninstalling) +2 +One Progress Bar (While Uninstalling) +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +1 + + +On Preload + + + + + + +On Progress +number e_Stage, string e_CurrentItemText, number e_CurrentItemPct, number e_StagePct + + + + + +On Cancel + + + + + + + + +1 +102 +1 +1 +78 +1 + + +2 +203 +1 +1 +1 +0 + + +2 +211 +1 +1 +2 +0 + + +2 +212 +1 +1 +3 +0 + + +7 +900 +1 +1 +4 + +0 +100 +1 + + +2 +213 +0 +1 +2 +0 + + +2 +214 +0 +1 +3 +0 + + +7 +901 +0 +1 +4 + +0 +100 +0 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Uninstaller +Removing %ProductName% +Please wait... +&Cancel + + + + +Progress Two +Performing Actions... + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 卸载程序 +正在移除 %ProductName% +请稍候... +取消(&C) + + + + +进程二 +正在执行动作... + + + + + + + + + +100 +Finished Uninstall +1 +Finished Uninstall +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +0 +-9 +1 + + +2 +200 +1 +1 +0 +0 + + +2 +300 +1 +1 +1 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Uninstaller +Uninstallation Finished +The uninstallation has completed successfully. +&Finish +< &Back +&Cancel +&Help +%ProductName% %ProductVer% has been uninstalled. + +Please click Finish to exit. + +Uninstallation Successful + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 卸载程序 +卸载已完成 +卸载已成功完成。 +完成(&F) +< 返回(&B) +取消(&C) +帮助(&H) +%ProductName% %ProductVer% 已被卸载。 + +请单击“完成”退出。 + +卸载成功 + + + + + + + +在启动时 + + + + + + +On Post Uninstall + + + + + + +
+ + +1 +%TempFolder%\%ProductName% Setup Log.txt +0 +1 + +0 +0 +0 +1 +2 + +0 +0 +1 +008080 +b4c2e3 +5971b6 + +1 +%TempLaunchFolder%\main.ico +0 +0 +%ProductName% + + +Arial +0 +-37 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +v%ProductVer% + + +Arial +0 +-18 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +
%Copyright%. All rights reserved. %CompanyURL%
+ + +Arial +0 +-16 +400 +0 +0 +0 +1 + + +ffffff +000000 +0 +1 +
+ +0 +0 +30 +30 +1 +1767105338 +0 +0 +1 +1 +2 +1 +0 +03F9811E-4657-4757-A24D-570C64F8ABB6 +0 +%CompanyName% +%CompanyURL% + + + + + +32768 +65535 +65535 +65535 +0 +0 +0 +0 +0 +0 +65535 +65535 +65535 +65535 +65535 +65535 + +0 +0 +0 +0 +1 +0 + + +Developer +New Project + + + +Copyright 2025 + + +9.5.3.0 +9.5.3.0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\shared + +0 + + + + + + +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\appinstaller\res\icons\main.ico +1 +0 + +All + + + + + +全局函数 + + + + + + +在安装后 + + + + + + +
+ + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + + + +%ProductName% +Desktop App Installer +1 + + +%CompanyName% +Windows Modern +1 + + +%ProductVer% +0.1.0.0 +1 + + +%Copyright% +Copyright (C)2025 %CompanyName% +1 + + +%CompanyURL% + +1 + + +%WindowTitle% +%ProductName% Setup (Develop Mode) +1 + + +%WindowTitleUninstall% +%ProductName% Uninstaller (Develop Mode) +1 + + +%AppFolder% +%ProgramFilesFolder%\%ProductName% +2 + + +%AppShortcutFolderName% +%ProductName% +2 + + + + +Default + + +0 + + +0 +setup.exe +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Generated +0 +0 +0 +0 +0 +0 + +1 + + + + + +1 + + +0 + + + + + +1 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\appinstaller\res\icons\main.ico +9.5.3.0 +9.5.3.0 +Indigo Rose Corporation +Setup Factory Runtime +Created with Setup Factory +sf_rt +Setup Application +Setup Engine Copyright ?1992-2019 Indigo Rose Corporation +Setup Factory is a trademark of Indigo Rose Corporation + + +0 + + + + + + +#SUFDIR#\Includes\Scripts\_SUF70_Global_Functions.lua +1 + +All + + + +
\ No newline at end of file diff --git a/others/Autosave/autosave_2025-11-30_22-58-12.suf b/others/Autosave/autosave_2025-11-30_22-58-12.suf new file mode 100644 index 0000000..ab0cd7e --- /dev/null +++ b/others/Autosave/autosave_2025-11-30_22-58-12.suf @@ -0,0 +1,4857 @@ + + +{AFB904C4-C255-4540-B97E-A75A34F1FFB0} +9.5.3.0 + + + +1 + +*.* +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\shared +* +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +1 + +1 +1 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\appinstaller.exe +appinstaller.exe +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +exe +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +1 +0 +0 +0 +0 +0 + +App Installer + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\certmgr.dll +certmgr.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\notice.dll +notice.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\pkgmgr.dll +pkgmgr.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\pkgread.dll +pkgread.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\PriFileFormat.dll +PriFileFormat.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\priformatcli.dll +priformatcli.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\reslib.dll +reslib.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\settings.exe +settings.exe +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +exe +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +1 +0 +0 +0 +0 +0 + +Settings + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\others\uninstall_icon.ico +uninstall_icon.ico +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\others +ico +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + + + + +100 +Welcome to Setup +1 +Welcome to Setup +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +77 +1 + + +1 +102 +1 +1 +78 +1 + + +2 +200 +1 +1 +1 +0 + + +2 +300 +1 +1 +0 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Welcome +Welcome to the installer for %ProductName% %ProductVer% +&Next > +< &Back +&Cancel +&Help +Welcome to the installer for %ProductName% %ProductVer%. + +It is strongly recommended that you exit all Windows programs before continuing with this installation. + +If you have any other programs running, please click Cancel, close the programs, and run this setup again. + +Otherwise, click Next to continue. + +Welcome + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +欢迎 +欢迎使用 %ProductName% %ProductVer% 安装程序 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +欢迎使用 %ProductName% %ProductVer% 安装程序。 + +强烈建议您在继续该安装之前,退出所有 Windows 程序。 + +如果您有任何其他程序正在运行,请单击“取消”,关闭程序,然后再次运行该安装程序。 + +否则,请单击“下一步”继续。 + +欢迎 + + + + + +125 +License Agreement +2 +License Agreement +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +1 + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +3 +400 +1 +1 +0 +0 +0 +1 +0 +0 + +1 +1 + + + +5 +602 +1 +1 +35 +1 +602 +603 + + +5 +603 +1 +1 +40 +0 +602 +603 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +License Agreement +Please read the following license agreement carefully. +&Next > +< &Back +&Cancel +&Help +Insert your license agreement text here... +I agree to the terms of this license agreement +I do not agree to the terms of this license agreement + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +许可协议 +请仔细阅读以下许可协议。 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +在此插入您的许可协议文本... +我同意该许可协议的条款 +我不同意该许可协议的条款 + + + + + + +105 +Scrolling Text +2 +Scrolling Text +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +3 +400 +1 +1 +0 +0 +0 +1 +0 +0 + +1 +1 + + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Important Information +Please read the following information. +&Next > +< &Back +&Cancel +&Help +This is currently in test mode, and this release is solely for testing the program's update features. While this version is available, the official release is still recommended. + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +重要信息 +请阅读以下信息。 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +当前是测试模式,发行此版本仅用于此程序的更新功能测试。虽然此版本可用,但仍建议使用正式版本。 + + + + + + +110 +Select Install Folder +2 +Select Install Folder +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +%AppFolder% + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +203 +1 +1 +1 +0 + + +2 +211 +1 +1 +2 +0 + + +6 +801 +1 +1 +3 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%AppFolder% + + +1 +110 +1 +1 +4 +0 + + +2 +208 +1 +1 +5 +0 + + +2 +207 +1 +1 +6 +0 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Installation Folder +Where would you like %ProductName% to be installed? +&Next > +< &Back +&Cancel +&Help +C&hange... +%AppFolder% +The software will be installed in the folder listed below. To select a different location, either type in a new path, or click Change to browse for an existing folder. +Install %ProductName% to: +Space required: %SpaceRequired% +Space available on selected drive: %SpaceAvailable% + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +安装文件夹 +您想将 %ProductName% 安装到何处? +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +更改(&H)... +%AppFolder% +软件将被安装到以下列出的文件夹中。要选择不同的位置,键入新的路径,或单击“更改”浏览现有的文件夹。 +将 %ProductName% 安装到: +所需空间: %SpaceRequired% +选定驱动器的可用空间: %SpaceAvailable% + + + + + +115 +Select Shortcut Folder +2 +Select Shortcut Folder +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +%AppShortcutFolderName% + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +203 +1 +1 +0 +0 + + +2 +211 +1 +1 +1 +0 + + +4 +501 +1 +1 +2 +0 +1 +1 + +4 +1 + + +5 +600 +1 +1 +35 +1 +600 +601 + + +5 +601 +1 +1 +40 +0 +600 +601 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Shortcut Folder +Where would you like the shortcuts to be installed? +&Next > +< &Back +&Cancel +&Help +The shortcut icons will be created in the folder indicated below. If you don't want to use the default folder, you can either type a new name, or select an existing folder from the list. +Shortcut Folder: +Install shortcuts for current user only +Make shortcuts available to all users +%AppShortcutFolderName% + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +快捷方式文件夹 +您想将快捷方式安装到何处? +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +快捷方式图标将在下面指出的文件夹中创建。如果您不想使用默认文件夹,您可以键入新的名称,或从列表中选择现有的文件夹。 +快捷方式文件夹: +只对当前用户安装快捷方式 +使快捷方式对所有用户都可用 +%AppShortcutFolderName% + + + + + +100 +Ready to Install +2 +Ready to Install +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +200 +1 +1 +0 +0 + + +2 +300 +0 +1 +1 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Ready to Install +You are now ready to install %ProductName% %ProductVer% +&Next > +< &Back +&Cancel +&Help +The installer now has enough information to install %ProductName% on your computer. + + +The following settings will be used: + +Install folder: %AppFolder% + +Shortcut folder: %AppShortcutFolderName% + + +Please click Next to proceed with the installation. +Title + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +准备安装 +现在您正准备安装 %ProductName% %ProductVer% +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +现在安装程序已有足够的信息将 %ProductName% 安装到您的计算机中。 + + +将使用以下设置: + +安装文件夹: %AppFolder% + +快捷方式文件夹: %AppShortcutFolderName% + + +请单击“下一步”继续安装。 +标题 + + + + + + +1 + + +130 +One Progress Bar (While Installing) +2 +One Progress Bar (While Installing) +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +1 + + +On Preload + + + + + + +On Progress +number e_Stage, string e_CurrentItemText, number e_CurrentItemPct, number e_StagePct + + + + + +On Cancel + + + + + + + + +1 +102 +1 +1 +78 +1 + + +2 +203 +1 +1 +1 +0 + + +2 +211 +1 +1 +2 +0 + + +2 +212 +1 +1 +3 +0 + + +7 +900 +1 +1 +4 + +0 +100 +1 + + +2 +213 +0 +1 +2 +0 + + +2 +214 +0 +1 +3 +0 + + +7 +901 +0 +1 +4 + +0 +100 +0 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Installing %ProductName% +Please wait... +&Cancel + + + + +Progress Two +Performing Actions... + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +正在安装 %ProductName% +请稍候... +取消(&C) + + + + +进程二 +正在执行动作... + + + + + + + + + +100 +Finished Install +1 +Finished Install +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +0 +-9 +1 + + +2 +200 +1 +1 +0 +0 + + +2 +300 +1 +1 +1 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Installation Finished +The installation has completed successfully. +&Finish +< &Back +&Cancel +&Help +The %ProductName% %ProductVer% installation is complete. + +Thank you for choosing %ProductName%! + +Please click Finish to exit this installer. + +Installation Successful + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +安装已完成 +安装已成功完成。 +完成(&F) +< 返回(&B) +取消(&C) +帮助(&H) +%ProductName% %ProductVer% 安装已完成。 + +感谢您选择 %ProductName%! + +请单击“完成”退出该安装程序。 + +安装成功 + + + + + + + + +List 1 + +All + + + + + +1 +uninstall.xml +%AppFolder%\Uninstall +%AppFolder%\uninstall.exe +1 +0 +0 + +0 +0 +1 +008080 +b4c2e3 +5971b6 + +0 + +0 +0 +%ProductName% Uninstall + + +Arial +0 +-37 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +v%ProductVer% + + +Arial +0 +-18 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +
%Copyright% %CompanyName%. All rights reserved. %CompanyURL%
+ + +Arial +0 +-16 +400 +0 +0 +0 +1 + + +ffffff +000000 +0 +1 +
+1 +1 +1 +1 +Microsoft.DesktopAppInstaller +%ProductName% +1 +%AppFolder%\appinstaller.exe +1 +%CompanyName% +%CompanyURL% +%CompanyName% Support Department +%CompanyURL% +%ProductVer% + + + + + +%AppFolder% + + +1 +Uninstall +Removes %ProductName% from your computer. +1 +%AppFolder%\uninstall_icon.ico +0 +1 +%TempFolder%\%ProductName% Uninstall Log.txt +0 +0 +1 + + +100 +Welcome to Uninstall +1 +Welcome to Uninstall +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +200 +1 +1 +1 +0 + + +2 +300 +1 +1 +0 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Uninstaller +Welcome +Welcome to the uninstaller for %ProductName% %ProductVer% +&Next > +< &Back +&Cancel +&Help +This program will uninstall %ProductName% %ProductVer%. + +If %ProductName% is currently running, please close it before proceeding with the uninstallation. + +Otherwise, click Next to continue. + +Uninstall %ProductName% + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 卸载程序 +欢迎 +欢迎使用 %ProductName% %ProductVer% 卸载程序 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +该程序将卸载 %ProductName% %ProductVer%。 + +如果 %ProductName% 当前正在运行,继续卸载之前请将其关闭。 + +否则,请单击“下一步”继续。 + +卸载 %ProductName% + + + + + + +1 + + +130 +One Progress Bar (While Uninstalling) +2 +One Progress Bar (While Uninstalling) +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +1 + + +On Preload + + + + + + +On Progress +number e_Stage, string e_CurrentItemText, number e_CurrentItemPct, number e_StagePct + + + + + +On Cancel + + + + + + + + +1 +102 +1 +1 +78 +1 + + +2 +203 +1 +1 +1 +0 + + +2 +211 +1 +1 +2 +0 + + +2 +212 +1 +1 +3 +0 + + +7 +900 +1 +1 +4 + +0 +100 +1 + + +2 +213 +0 +1 +2 +0 + + +2 +214 +0 +1 +3 +0 + + +7 +901 +0 +1 +4 + +0 +100 +0 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Uninstaller +Removing %ProductName% +Please wait... +&Cancel + + + + +Progress Two +Performing Actions... + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 卸载程序 +正在移除 %ProductName% +请稍候... +取消(&C) + + + + +进程二 +正在执行动作... + + + + + + + + + +100 +Finished Uninstall +1 +Finished Uninstall +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +0 +-9 +1 + + +2 +200 +1 +1 +0 +0 + + +2 +300 +1 +1 +1 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Uninstaller +Uninstallation Finished +The uninstallation has completed successfully. +&Finish +< &Back +&Cancel +&Help +%ProductName% %ProductVer% has been uninstalled. + +Please click Finish to exit. + +Uninstallation Successful + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 卸载程序 +卸载已完成 +卸载已成功完成。 +完成(&F) +< 返回(&B) +取消(&C) +帮助(&H) +%ProductName% %ProductVer% 已被卸载。 + +请单击“完成”退出。 + +卸载成功 + + + + + + + +在启动时 + + + + + + +On Post Uninstall + + + + + + +
+ + +1 +%TempFolder%\%ProductName% Setup Log.txt +0 +1 + +0 +0 +0 +1 +2 + +0 +0 +1 +008080 +b4c2e3 +5971b6 + +1 +%TempLaunchFolder%\main.ico +0 +0 +%ProductName% + + +Arial +0 +-37 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +v%ProductVer% + + +Arial +0 +-18 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +
%Copyright%. All rights reserved. %CompanyURL%
+ + +Arial +0 +-16 +400 +0 +0 +0 +1 + + +ffffff +000000 +0 +1 +
+ +0 +0 +30 +30 +1 +1767105338 +0 +0 +1 +1 +2 +1 +0 +03F9811E-4657-4757-A24D-570C64F8ABB6 +0 +%CompanyName% +%CompanyURL% + + + + + +32768 +65535 +65535 +65535 +0 +0 +0 +0 +0 +0 +65535 +65535 +65535 +65535 +65535 +65535 + +0 +0 +0 +0 +1 +0 + + +Developer +New Project + + + +Copyright 2025 + + +9.5.3.0 +9.5.3.0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\shared + +0 + + + + + + +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\appinstaller\res\icons\main.ico +1 +0 + +All + + + + + +全局函数 + + + + + + +在安装后 + + + + + + +
+ + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + + + +%ProductName% +Desktop App Installer +1 + + +%CompanyName% +Windows Modern +1 + + +%ProductVer% +0.1.0.0 +1 + + +%Copyright% +Copyright (C)2025 %CompanyName% +1 + + +%CompanyURL% + +1 + + +%WindowTitle% +%ProductName% Setup +1 + + +%WindowTitleUninstall% +%ProductName% Uninstaller +1 + + +%AppFolder% +%ProgramFilesFolder%\%ProductName% +2 + + +%AppShortcutFolderName% +%ProductName% +2 + + + + +Default + + +0 + + +0 +setup.exe +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Generated +0 +0 +0 +0 +0 +0 + +1 + + + + + +1 + + +0 + + + + + +1 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\appinstaller\res\icons\main.ico +9.5.3.0 +9.5.3.0 +Indigo Rose Corporation +Setup Factory Runtime +Created with Setup Factory +sf_rt +Setup Application +Setup Engine Copyright ?1992-2019 Indigo Rose Corporation +Setup Factory is a trademark of Indigo Rose Corporation + + +0 + + + + + + +#SUFDIR#\Includes\Scripts\_SUF70_Global_Functions.lua +1 + +All + + + +
\ No newline at end of file diff --git a/others/Autosave/autosave_2025-11-30_23-02-18.suf b/others/Autosave/autosave_2025-11-30_23-02-18.suf new file mode 100644 index 0000000..ab0cd7e --- /dev/null +++ b/others/Autosave/autosave_2025-11-30_23-02-18.suf @@ -0,0 +1,4857 @@ + + +{AFB904C4-C255-4540-B97E-A75A34F1FFB0} +9.5.3.0 + + + +1 + +*.* +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\shared +* +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +1 + +1 +1 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\appinstaller.exe +appinstaller.exe +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +exe +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +1 +0 +0 +0 +0 +0 + +App Installer + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\certmgr.dll +certmgr.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\notice.dll +notice.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\pkgmgr.dll +pkgmgr.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\pkgread.dll +pkgread.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\PriFileFormat.dll +PriFileFormat.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\priformatcli.dll +priformatcli.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\reslib.dll +reslib.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\settings.exe +settings.exe +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +exe +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +1 +0 +0 +0 +0 +0 + +Settings + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\others\uninstall_icon.ico +uninstall_icon.ico +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\others +ico +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + + + + +100 +Welcome to Setup +1 +Welcome to Setup +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +77 +1 + + +1 +102 +1 +1 +78 +1 + + +2 +200 +1 +1 +1 +0 + + +2 +300 +1 +1 +0 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Welcome +Welcome to the installer for %ProductName% %ProductVer% +&Next > +< &Back +&Cancel +&Help +Welcome to the installer for %ProductName% %ProductVer%. + +It is strongly recommended that you exit all Windows programs before continuing with this installation. + +If you have any other programs running, please click Cancel, close the programs, and run this setup again. + +Otherwise, click Next to continue. + +Welcome + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +欢迎 +欢迎使用 %ProductName% %ProductVer% 安装程序 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +欢迎使用 %ProductName% %ProductVer% 安装程序。 + +强烈建议您在继续该安装之前,退出所有 Windows 程序。 + +如果您有任何其他程序正在运行,请单击“取消”,关闭程序,然后再次运行该安装程序。 + +否则,请单击“下一步”继续。 + +欢迎 + + + + + +125 +License Agreement +2 +License Agreement +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +1 + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +3 +400 +1 +1 +0 +0 +0 +1 +0 +0 + +1 +1 + + + +5 +602 +1 +1 +35 +1 +602 +603 + + +5 +603 +1 +1 +40 +0 +602 +603 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +License Agreement +Please read the following license agreement carefully. +&Next > +< &Back +&Cancel +&Help +Insert your license agreement text here... +I agree to the terms of this license agreement +I do not agree to the terms of this license agreement + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +许可协议 +请仔细阅读以下许可协议。 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +在此插入您的许可协议文本... +我同意该许可协议的条款 +我不同意该许可协议的条款 + + + + + + +105 +Scrolling Text +2 +Scrolling Text +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +3 +400 +1 +1 +0 +0 +0 +1 +0 +0 + +1 +1 + + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Important Information +Please read the following information. +&Next > +< &Back +&Cancel +&Help +This is currently in test mode, and this release is solely for testing the program's update features. While this version is available, the official release is still recommended. + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +重要信息 +请阅读以下信息。 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +当前是测试模式,发行此版本仅用于此程序的更新功能测试。虽然此版本可用,但仍建议使用正式版本。 + + + + + + +110 +Select Install Folder +2 +Select Install Folder +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +%AppFolder% + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +203 +1 +1 +1 +0 + + +2 +211 +1 +1 +2 +0 + + +6 +801 +1 +1 +3 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%AppFolder% + + +1 +110 +1 +1 +4 +0 + + +2 +208 +1 +1 +5 +0 + + +2 +207 +1 +1 +6 +0 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Installation Folder +Where would you like %ProductName% to be installed? +&Next > +< &Back +&Cancel +&Help +C&hange... +%AppFolder% +The software will be installed in the folder listed below. To select a different location, either type in a new path, or click Change to browse for an existing folder. +Install %ProductName% to: +Space required: %SpaceRequired% +Space available on selected drive: %SpaceAvailable% + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +安装文件夹 +您想将 %ProductName% 安装到何处? +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +更改(&H)... +%AppFolder% +软件将被安装到以下列出的文件夹中。要选择不同的位置,键入新的路径,或单击“更改”浏览现有的文件夹。 +将 %ProductName% 安装到: +所需空间: %SpaceRequired% +选定驱动器的可用空间: %SpaceAvailable% + + + + + +115 +Select Shortcut Folder +2 +Select Shortcut Folder +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +%AppShortcutFolderName% + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +203 +1 +1 +0 +0 + + +2 +211 +1 +1 +1 +0 + + +4 +501 +1 +1 +2 +0 +1 +1 + +4 +1 + + +5 +600 +1 +1 +35 +1 +600 +601 + + +5 +601 +1 +1 +40 +0 +600 +601 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Shortcut Folder +Where would you like the shortcuts to be installed? +&Next > +< &Back +&Cancel +&Help +The shortcut icons will be created in the folder indicated below. If you don't want to use the default folder, you can either type a new name, or select an existing folder from the list. +Shortcut Folder: +Install shortcuts for current user only +Make shortcuts available to all users +%AppShortcutFolderName% + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +快捷方式文件夹 +您想将快捷方式安装到何处? +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +快捷方式图标将在下面指出的文件夹中创建。如果您不想使用默认文件夹,您可以键入新的名称,或从列表中选择现有的文件夹。 +快捷方式文件夹: +只对当前用户安装快捷方式 +使快捷方式对所有用户都可用 +%AppShortcutFolderName% + + + + + +100 +Ready to Install +2 +Ready to Install +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +200 +1 +1 +0 +0 + + +2 +300 +0 +1 +1 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Ready to Install +You are now ready to install %ProductName% %ProductVer% +&Next > +< &Back +&Cancel +&Help +The installer now has enough information to install %ProductName% on your computer. + + +The following settings will be used: + +Install folder: %AppFolder% + +Shortcut folder: %AppShortcutFolderName% + + +Please click Next to proceed with the installation. +Title + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +准备安装 +现在您正准备安装 %ProductName% %ProductVer% +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +现在安装程序已有足够的信息将 %ProductName% 安装到您的计算机中。 + + +将使用以下设置: + +安装文件夹: %AppFolder% + +快捷方式文件夹: %AppShortcutFolderName% + + +请单击“下一步”继续安装。 +标题 + + + + + + +1 + + +130 +One Progress Bar (While Installing) +2 +One Progress Bar (While Installing) +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +1 + + +On Preload + + + + + + +On Progress +number e_Stage, string e_CurrentItemText, number e_CurrentItemPct, number e_StagePct + + + + + +On Cancel + + + + + + + + +1 +102 +1 +1 +78 +1 + + +2 +203 +1 +1 +1 +0 + + +2 +211 +1 +1 +2 +0 + + +2 +212 +1 +1 +3 +0 + + +7 +900 +1 +1 +4 + +0 +100 +1 + + +2 +213 +0 +1 +2 +0 + + +2 +214 +0 +1 +3 +0 + + +7 +901 +0 +1 +4 + +0 +100 +0 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Installing %ProductName% +Please wait... +&Cancel + + + + +Progress Two +Performing Actions... + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +正在安装 %ProductName% +请稍候... +取消(&C) + + + + +进程二 +正在执行动作... + + + + + + + + + +100 +Finished Install +1 +Finished Install +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +0 +-9 +1 + + +2 +200 +1 +1 +0 +0 + + +2 +300 +1 +1 +1 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Installation Finished +The installation has completed successfully. +&Finish +< &Back +&Cancel +&Help +The %ProductName% %ProductVer% installation is complete. + +Thank you for choosing %ProductName%! + +Please click Finish to exit this installer. + +Installation Successful + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +安装已完成 +安装已成功完成。 +完成(&F) +< 返回(&B) +取消(&C) +帮助(&H) +%ProductName% %ProductVer% 安装已完成。 + +感谢您选择 %ProductName%! + +请单击“完成”退出该安装程序。 + +安装成功 + + + + + + + + +List 1 + +All + + + + + +1 +uninstall.xml +%AppFolder%\Uninstall +%AppFolder%\uninstall.exe +1 +0 +0 + +0 +0 +1 +008080 +b4c2e3 +5971b6 + +0 + +0 +0 +%ProductName% Uninstall + + +Arial +0 +-37 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +v%ProductVer% + + +Arial +0 +-18 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +
%Copyright% %CompanyName%. All rights reserved. %CompanyURL%
+ + +Arial +0 +-16 +400 +0 +0 +0 +1 + + +ffffff +000000 +0 +1 +
+1 +1 +1 +1 +Microsoft.DesktopAppInstaller +%ProductName% +1 +%AppFolder%\appinstaller.exe +1 +%CompanyName% +%CompanyURL% +%CompanyName% Support Department +%CompanyURL% +%ProductVer% + + + + + +%AppFolder% + + +1 +Uninstall +Removes %ProductName% from your computer. +1 +%AppFolder%\uninstall_icon.ico +0 +1 +%TempFolder%\%ProductName% Uninstall Log.txt +0 +0 +1 + + +100 +Welcome to Uninstall +1 +Welcome to Uninstall +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +200 +1 +1 +1 +0 + + +2 +300 +1 +1 +0 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Uninstaller +Welcome +Welcome to the uninstaller for %ProductName% %ProductVer% +&Next > +< &Back +&Cancel +&Help +This program will uninstall %ProductName% %ProductVer%. + +If %ProductName% is currently running, please close it before proceeding with the uninstallation. + +Otherwise, click Next to continue. + +Uninstall %ProductName% + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 卸载程序 +欢迎 +欢迎使用 %ProductName% %ProductVer% 卸载程序 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +该程序将卸载 %ProductName% %ProductVer%。 + +如果 %ProductName% 当前正在运行,继续卸载之前请将其关闭。 + +否则,请单击“下一步”继续。 + +卸载 %ProductName% + + + + + + +1 + + +130 +One Progress Bar (While Uninstalling) +2 +One Progress Bar (While Uninstalling) +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +1 + + +On Preload + + + + + + +On Progress +number e_Stage, string e_CurrentItemText, number e_CurrentItemPct, number e_StagePct + + + + + +On Cancel + + + + + + + + +1 +102 +1 +1 +78 +1 + + +2 +203 +1 +1 +1 +0 + + +2 +211 +1 +1 +2 +0 + + +2 +212 +1 +1 +3 +0 + + +7 +900 +1 +1 +4 + +0 +100 +1 + + +2 +213 +0 +1 +2 +0 + + +2 +214 +0 +1 +3 +0 + + +7 +901 +0 +1 +4 + +0 +100 +0 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Uninstaller +Removing %ProductName% +Please wait... +&Cancel + + + + +Progress Two +Performing Actions... + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 卸载程序 +正在移除 %ProductName% +请稍候... +取消(&C) + + + + +进程二 +正在执行动作... + + + + + + + + + +100 +Finished Uninstall +1 +Finished Uninstall +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +0 +-9 +1 + + +2 +200 +1 +1 +0 +0 + + +2 +300 +1 +1 +1 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Uninstaller +Uninstallation Finished +The uninstallation has completed successfully. +&Finish +< &Back +&Cancel +&Help +%ProductName% %ProductVer% has been uninstalled. + +Please click Finish to exit. + +Uninstallation Successful + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 卸载程序 +卸载已完成 +卸载已成功完成。 +完成(&F) +< 返回(&B) +取消(&C) +帮助(&H) +%ProductName% %ProductVer% 已被卸载。 + +请单击“完成”退出。 + +卸载成功 + + + + + + + +在启动时 + + + + + + +On Post Uninstall + + + + + + +
+ + +1 +%TempFolder%\%ProductName% Setup Log.txt +0 +1 + +0 +0 +0 +1 +2 + +0 +0 +1 +008080 +b4c2e3 +5971b6 + +1 +%TempLaunchFolder%\main.ico +0 +0 +%ProductName% + + +Arial +0 +-37 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +v%ProductVer% + + +Arial +0 +-18 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +
%Copyright%. All rights reserved. %CompanyURL%
+ + +Arial +0 +-16 +400 +0 +0 +0 +1 + + +ffffff +000000 +0 +1 +
+ +0 +0 +30 +30 +1 +1767105338 +0 +0 +1 +1 +2 +1 +0 +03F9811E-4657-4757-A24D-570C64F8ABB6 +0 +%CompanyName% +%CompanyURL% + + + + + +32768 +65535 +65535 +65535 +0 +0 +0 +0 +0 +0 +65535 +65535 +65535 +65535 +65535 +65535 + +0 +0 +0 +0 +1 +0 + + +Developer +New Project + + + +Copyright 2025 + + +9.5.3.0 +9.5.3.0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\shared + +0 + + + + + + +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\appinstaller\res\icons\main.ico +1 +0 + +All + + + + + +全局函数 + + + + + + +在安装后 + + + + + + +
+ + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + + + +%ProductName% +Desktop App Installer +1 + + +%CompanyName% +Windows Modern +1 + + +%ProductVer% +0.1.0.0 +1 + + +%Copyright% +Copyright (C)2025 %CompanyName% +1 + + +%CompanyURL% + +1 + + +%WindowTitle% +%ProductName% Setup +1 + + +%WindowTitleUninstall% +%ProductName% Uninstaller +1 + + +%AppFolder% +%ProgramFilesFolder%\%ProductName% +2 + + +%AppShortcutFolderName% +%ProductName% +2 + + + + +Default + + +0 + + +0 +setup.exe +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Generated +0 +0 +0 +0 +0 +0 + +1 + + + + + +1 + + +0 + + + + + +1 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\appinstaller\res\icons\main.ico +9.5.3.0 +9.5.3.0 +Indigo Rose Corporation +Setup Factory Runtime +Created with Setup Factory +sf_rt +Setup Application +Setup Engine Copyright ?1992-2019 Indigo Rose Corporation +Setup Factory is a trademark of Indigo Rose Corporation + + +0 + + + + + + +#SUFDIR#\Includes\Scripts\_SUF70_Global_Functions.lua +1 + +All + + + +
\ No newline at end of file diff --git a/others/Autosave/autosave_2025-11-30_23-23-01.suf b/others/Autosave/autosave_2025-11-30_23-23-01.suf new file mode 100644 index 0000000..ab0cd7e --- /dev/null +++ b/others/Autosave/autosave_2025-11-30_23-23-01.suf @@ -0,0 +1,4857 @@ + + +{AFB904C4-C255-4540-B97E-A75A34F1FFB0} +9.5.3.0 + + + +1 + +*.* +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\shared +* +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +1 + +1 +1 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\appinstaller.exe +appinstaller.exe +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +exe +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +1 +0 +0 +0 +0 +0 + +App Installer + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\certmgr.dll +certmgr.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\notice.dll +notice.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\pkgmgr.dll +pkgmgr.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\pkgread.dll +pkgread.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\PriFileFormat.dll +PriFileFormat.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\priformatcli.dll +priformatcli.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\reslib.dll +reslib.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\settings.exe +settings.exe +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +exe +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +1 +0 +0 +0 +0 +0 + +Settings + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\others\uninstall_icon.ico +uninstall_icon.ico +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\others +ico +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + + + + +100 +Welcome to Setup +1 +Welcome to Setup +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +77 +1 + + +1 +102 +1 +1 +78 +1 + + +2 +200 +1 +1 +1 +0 + + +2 +300 +1 +1 +0 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Welcome +Welcome to the installer for %ProductName% %ProductVer% +&Next > +< &Back +&Cancel +&Help +Welcome to the installer for %ProductName% %ProductVer%. + +It is strongly recommended that you exit all Windows programs before continuing with this installation. + +If you have any other programs running, please click Cancel, close the programs, and run this setup again. + +Otherwise, click Next to continue. + +Welcome + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +欢迎 +欢迎使用 %ProductName% %ProductVer% 安装程序 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +欢迎使用 %ProductName% %ProductVer% 安装程序。 + +强烈建议您在继续该安装之前,退出所有 Windows 程序。 + +如果您有任何其他程序正在运行,请单击“取消”,关闭程序,然后再次运行该安装程序。 + +否则,请单击“下一步”继续。 + +欢迎 + + + + + +125 +License Agreement +2 +License Agreement +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +1 + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +3 +400 +1 +1 +0 +0 +0 +1 +0 +0 + +1 +1 + + + +5 +602 +1 +1 +35 +1 +602 +603 + + +5 +603 +1 +1 +40 +0 +602 +603 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +License Agreement +Please read the following license agreement carefully. +&Next > +< &Back +&Cancel +&Help +Insert your license agreement text here... +I agree to the terms of this license agreement +I do not agree to the terms of this license agreement + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +许可协议 +请仔细阅读以下许可协议。 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +在此插入您的许可协议文本... +我同意该许可协议的条款 +我不同意该许可协议的条款 + + + + + + +105 +Scrolling Text +2 +Scrolling Text +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +3 +400 +1 +1 +0 +0 +0 +1 +0 +0 + +1 +1 + + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Important Information +Please read the following information. +&Next > +< &Back +&Cancel +&Help +This is currently in test mode, and this release is solely for testing the program's update features. While this version is available, the official release is still recommended. + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +重要信息 +请阅读以下信息。 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +当前是测试模式,发行此版本仅用于此程序的更新功能测试。虽然此版本可用,但仍建议使用正式版本。 + + + + + + +110 +Select Install Folder +2 +Select Install Folder +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +%AppFolder% + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +203 +1 +1 +1 +0 + + +2 +211 +1 +1 +2 +0 + + +6 +801 +1 +1 +3 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%AppFolder% + + +1 +110 +1 +1 +4 +0 + + +2 +208 +1 +1 +5 +0 + + +2 +207 +1 +1 +6 +0 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Installation Folder +Where would you like %ProductName% to be installed? +&Next > +< &Back +&Cancel +&Help +C&hange... +%AppFolder% +The software will be installed in the folder listed below. To select a different location, either type in a new path, or click Change to browse for an existing folder. +Install %ProductName% to: +Space required: %SpaceRequired% +Space available on selected drive: %SpaceAvailable% + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +安装文件夹 +您想将 %ProductName% 安装到何处? +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +更改(&H)... +%AppFolder% +软件将被安装到以下列出的文件夹中。要选择不同的位置,键入新的路径,或单击“更改”浏览现有的文件夹。 +将 %ProductName% 安装到: +所需空间: %SpaceRequired% +选定驱动器的可用空间: %SpaceAvailable% + + + + + +115 +Select Shortcut Folder +2 +Select Shortcut Folder +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +%AppShortcutFolderName% + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +203 +1 +1 +0 +0 + + +2 +211 +1 +1 +1 +0 + + +4 +501 +1 +1 +2 +0 +1 +1 + +4 +1 + + +5 +600 +1 +1 +35 +1 +600 +601 + + +5 +601 +1 +1 +40 +0 +600 +601 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Shortcut Folder +Where would you like the shortcuts to be installed? +&Next > +< &Back +&Cancel +&Help +The shortcut icons will be created in the folder indicated below. If you don't want to use the default folder, you can either type a new name, or select an existing folder from the list. +Shortcut Folder: +Install shortcuts for current user only +Make shortcuts available to all users +%AppShortcutFolderName% + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +快捷方式文件夹 +您想将快捷方式安装到何处? +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +快捷方式图标将在下面指出的文件夹中创建。如果您不想使用默认文件夹,您可以键入新的名称,或从列表中选择现有的文件夹。 +快捷方式文件夹: +只对当前用户安装快捷方式 +使快捷方式对所有用户都可用 +%AppShortcutFolderName% + + + + + +100 +Ready to Install +2 +Ready to Install +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +200 +1 +1 +0 +0 + + +2 +300 +0 +1 +1 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Ready to Install +You are now ready to install %ProductName% %ProductVer% +&Next > +< &Back +&Cancel +&Help +The installer now has enough information to install %ProductName% on your computer. + + +The following settings will be used: + +Install folder: %AppFolder% + +Shortcut folder: %AppShortcutFolderName% + + +Please click Next to proceed with the installation. +Title + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +准备安装 +现在您正准备安装 %ProductName% %ProductVer% +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +现在安装程序已有足够的信息将 %ProductName% 安装到您的计算机中。 + + +将使用以下设置: + +安装文件夹: %AppFolder% + +快捷方式文件夹: %AppShortcutFolderName% + + +请单击“下一步”继续安装。 +标题 + + + + + + +1 + + +130 +One Progress Bar (While Installing) +2 +One Progress Bar (While Installing) +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +1 + + +On Preload + + + + + + +On Progress +number e_Stage, string e_CurrentItemText, number e_CurrentItemPct, number e_StagePct + + + + + +On Cancel + + + + + + + + +1 +102 +1 +1 +78 +1 + + +2 +203 +1 +1 +1 +0 + + +2 +211 +1 +1 +2 +0 + + +2 +212 +1 +1 +3 +0 + + +7 +900 +1 +1 +4 + +0 +100 +1 + + +2 +213 +0 +1 +2 +0 + + +2 +214 +0 +1 +3 +0 + + +7 +901 +0 +1 +4 + +0 +100 +0 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Installing %ProductName% +Please wait... +&Cancel + + + + +Progress Two +Performing Actions... + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +正在安装 %ProductName% +请稍候... +取消(&C) + + + + +进程二 +正在执行动作... + + + + + + + + + +100 +Finished Install +1 +Finished Install +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +0 +-9 +1 + + +2 +200 +1 +1 +0 +0 + + +2 +300 +1 +1 +1 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Installation Finished +The installation has completed successfully. +&Finish +< &Back +&Cancel +&Help +The %ProductName% %ProductVer% installation is complete. + +Thank you for choosing %ProductName%! + +Please click Finish to exit this installer. + +Installation Successful + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +安装已完成 +安装已成功完成。 +完成(&F) +< 返回(&B) +取消(&C) +帮助(&H) +%ProductName% %ProductVer% 安装已完成。 + +感谢您选择 %ProductName%! + +请单击“完成”退出该安装程序。 + +安装成功 + + + + + + + + +List 1 + +All + + + + + +1 +uninstall.xml +%AppFolder%\Uninstall +%AppFolder%\uninstall.exe +1 +0 +0 + +0 +0 +1 +008080 +b4c2e3 +5971b6 + +0 + +0 +0 +%ProductName% Uninstall + + +Arial +0 +-37 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +v%ProductVer% + + +Arial +0 +-18 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +
%Copyright% %CompanyName%. All rights reserved. %CompanyURL%
+ + +Arial +0 +-16 +400 +0 +0 +0 +1 + + +ffffff +000000 +0 +1 +
+1 +1 +1 +1 +Microsoft.DesktopAppInstaller +%ProductName% +1 +%AppFolder%\appinstaller.exe +1 +%CompanyName% +%CompanyURL% +%CompanyName% Support Department +%CompanyURL% +%ProductVer% + + + + + +%AppFolder% + + +1 +Uninstall +Removes %ProductName% from your computer. +1 +%AppFolder%\uninstall_icon.ico +0 +1 +%TempFolder%\%ProductName% Uninstall Log.txt +0 +0 +1 + + +100 +Welcome to Uninstall +1 +Welcome to Uninstall +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +200 +1 +1 +1 +0 + + +2 +300 +1 +1 +0 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Uninstaller +Welcome +Welcome to the uninstaller for %ProductName% %ProductVer% +&Next > +< &Back +&Cancel +&Help +This program will uninstall %ProductName% %ProductVer%. + +If %ProductName% is currently running, please close it before proceeding with the uninstallation. + +Otherwise, click Next to continue. + +Uninstall %ProductName% + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 卸载程序 +欢迎 +欢迎使用 %ProductName% %ProductVer% 卸载程序 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +该程序将卸载 %ProductName% %ProductVer%。 + +如果 %ProductName% 当前正在运行,继续卸载之前请将其关闭。 + +否则,请单击“下一步”继续。 + +卸载 %ProductName% + + + + + + +1 + + +130 +One Progress Bar (While Uninstalling) +2 +One Progress Bar (While Uninstalling) +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +1 + + +On Preload + + + + + + +On Progress +number e_Stage, string e_CurrentItemText, number e_CurrentItemPct, number e_StagePct + + + + + +On Cancel + + + + + + + + +1 +102 +1 +1 +78 +1 + + +2 +203 +1 +1 +1 +0 + + +2 +211 +1 +1 +2 +0 + + +2 +212 +1 +1 +3 +0 + + +7 +900 +1 +1 +4 + +0 +100 +1 + + +2 +213 +0 +1 +2 +0 + + +2 +214 +0 +1 +3 +0 + + +7 +901 +0 +1 +4 + +0 +100 +0 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Uninstaller +Removing %ProductName% +Please wait... +&Cancel + + + + +Progress Two +Performing Actions... + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 卸载程序 +正在移除 %ProductName% +请稍候... +取消(&C) + + + + +进程二 +正在执行动作... + + + + + + + + + +100 +Finished Uninstall +1 +Finished Uninstall +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +0 +-9 +1 + + +2 +200 +1 +1 +0 +0 + + +2 +300 +1 +1 +1 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Uninstaller +Uninstallation Finished +The uninstallation has completed successfully. +&Finish +< &Back +&Cancel +&Help +%ProductName% %ProductVer% has been uninstalled. + +Please click Finish to exit. + +Uninstallation Successful + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 卸载程序 +卸载已完成 +卸载已成功完成。 +完成(&F) +< 返回(&B) +取消(&C) +帮助(&H) +%ProductName% %ProductVer% 已被卸载。 + +请单击“完成”退出。 + +卸载成功 + + + + + + + +在启动时 + + + + + + +On Post Uninstall + + + + + + +
+ + +1 +%TempFolder%\%ProductName% Setup Log.txt +0 +1 + +0 +0 +0 +1 +2 + +0 +0 +1 +008080 +b4c2e3 +5971b6 + +1 +%TempLaunchFolder%\main.ico +0 +0 +%ProductName% + + +Arial +0 +-37 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +v%ProductVer% + + +Arial +0 +-18 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +
%Copyright%. All rights reserved. %CompanyURL%
+ + +Arial +0 +-16 +400 +0 +0 +0 +1 + + +ffffff +000000 +0 +1 +
+ +0 +0 +30 +30 +1 +1767105338 +0 +0 +1 +1 +2 +1 +0 +03F9811E-4657-4757-A24D-570C64F8ABB6 +0 +%CompanyName% +%CompanyURL% + + + + + +32768 +65535 +65535 +65535 +0 +0 +0 +0 +0 +0 +65535 +65535 +65535 +65535 +65535 +65535 + +0 +0 +0 +0 +1 +0 + + +Developer +New Project + + + +Copyright 2025 + + +9.5.3.0 +9.5.3.0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\shared + +0 + + + + + + +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\appinstaller\res\icons\main.ico +1 +0 + +All + + + + + +全局函数 + + + + + + +在安装后 + + + + + + +
+ + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + + + +%ProductName% +Desktop App Installer +1 + + +%CompanyName% +Windows Modern +1 + + +%ProductVer% +0.1.0.0 +1 + + +%Copyright% +Copyright (C)2025 %CompanyName% +1 + + +%CompanyURL% + +1 + + +%WindowTitle% +%ProductName% Setup +1 + + +%WindowTitleUninstall% +%ProductName% Uninstaller +1 + + +%AppFolder% +%ProgramFilesFolder%\%ProductName% +2 + + +%AppShortcutFolderName% +%ProductName% +2 + + + + +Default + + +0 + + +0 +setup.exe +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Generated +0 +0 +0 +0 +0 +0 + +1 + + + + + +1 + + +0 + + + + + +1 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\appinstaller\res\icons\main.ico +9.5.3.0 +9.5.3.0 +Indigo Rose Corporation +Setup Factory Runtime +Created with Setup Factory +sf_rt +Setup Application +Setup Engine Copyright ?1992-2019 Indigo Rose Corporation +Setup Factory is a trademark of Indigo Rose Corporation + + +0 + + + + + + +#SUFDIR#\Includes\Scripts\_SUF70_Global_Functions.lua +1 + +All + + + +
\ No newline at end of file diff --git a/others/buildsetup.suf b/others/buildsetup.suf new file mode 100644 index 0000000..d615312 --- /dev/null +++ b/others/buildsetup.suf @@ -0,0 +1,4857 @@ + + +{AFB904C4-C255-4540-B97E-A75A34F1FFB0} +9.5.3.0 + + + +1 + +*.* +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\shared +* +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +1 + +1 +1 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\appinstaller.exe +appinstaller.exe +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +exe +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +1 +0 +0 +0 +0 +0 + +App Installer + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\certmgr.dll +certmgr.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\notice.dll +notice.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\pkgmgr.dll +pkgmgr.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\pkgread.dll +pkgread.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\PriFileFormat.dll +PriFileFormat.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\priformatcli.dll +priformatcli.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\reslib.dll +reslib.dll +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +dll +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release\settings.exe +settings.exe +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Release +exe +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +1 +0 +0 +0 +0 +0 + +Settings + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + +0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\others\uninstall_icon.ico +uninstall_icon.ico +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\others +ico +档案 + +1 +0 +%AppFolder% +1 +0 +0 +1000 +0 +0 +0 +0 +0 +0 +0 +0 + + + + + +0 + +0 +0 +0 +0 + +0 +0 +0 +1 +1 +0 +0 +0 +0 + +32768 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 +65535 + + + +All + +None + + +0 +0 +0 + + + + + +100 +Welcome to Setup +1 +Welcome to Setup +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +77 +1 + + +1 +102 +1 +1 +78 +1 + + +2 +200 +1 +1 +1 +0 + + +2 +300 +1 +1 +0 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Welcome +Welcome to the installer for %ProductName% %ProductVer% +&Next > +< &Back +&Cancel +&Help +Welcome to the installer for %ProductName% %ProductVer%. + +It is strongly recommended that you exit all Windows programs before continuing with this installation. + +If you have any other programs running, please click Cancel, close the programs, and run this setup again. + +Otherwise, click Next to continue. + +Welcome + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +欢迎 +欢迎使用 %ProductName% %ProductVer% 安装程序 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +欢迎使用 %ProductName% %ProductVer% 安装程序。 + +强烈建议您在继续该安装之前,退出所有 Windows 程序。 + +如果您有任何其他程序正在运行,请单击“取消”,关闭程序,然后再次运行该安装程序。 + +否则,请单击“下一步”继续。 + +欢迎 + + + + + +125 +License Agreement +2 +License Agreement +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +1 + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +3 +400 +1 +1 +0 +0 +0 +1 +0 +0 + +1 +1 + + + +5 +602 +1 +1 +35 +1 +602 +603 + + +5 +603 +1 +1 +40 +0 +602 +603 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +License Agreement +Please read the following license agreement carefully. +&Next > +< &Back +&Cancel +&Help +Insert your license agreement text here... +I agree to the terms of this license agreement +I do not agree to the terms of this license agreement + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +许可协议 +请仔细阅读以下许可协议。 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +在此插入您的许可协议文本... +我同意该许可协议的条款 +我不同意该许可协议的条款 + + + + + + +105 +Scrolling Text +2 +Scrolling Text +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +3 +400 +1 +1 +0 +0 +0 +1 +0 +0 + +1 +1 + + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Important Information +Please read the following information. +&Next > +< &Back +&Cancel +&Help +This is currently in test mode, and this release is solely for testing the program's update features. While this version is available, the official release is still recommended. + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +重要信息 +请阅读以下信息。 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +当前是测试模式,发行此版本仅用于此程序的更新功能测试。虽然此版本可用,但仍建议使用正式版本。 + + + + + + +110 +Select Install Folder +2 +Select Install Folder +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +%AppFolder% + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +203 +1 +1 +1 +0 + + +2 +211 +1 +1 +2 +0 + + +6 +801 +1 +1 +3 +0 +0 +0 +0 + +0 +1 +0 +1 +4 +%AppFolder% + + +1 +110 +1 +1 +4 +0 + + +2 +208 +1 +1 +5 +0 + + +2 +207 +1 +1 +6 +0 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Installation Folder +Where would you like %ProductName% to be installed? +&Next > +< &Back +&Cancel +&Help +C&hange... +%AppFolder% +The software will be installed in the folder listed below. To select a different location, either type in a new path, or click Change to browse for an existing folder. +Install %ProductName% to: +Space required: %SpaceRequired% +Space available on selected drive: %SpaceAvailable% + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +安装文件夹 +您想将 %ProductName% 安装到何处? +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +更改(&H)... +%AppFolder% +软件将被安装到以下列出的文件夹中。要选择不同的位置,键入新的路径,或单击“更改”浏览现有的文件夹。 +将 %ProductName% 安装到: +所需空间: %SpaceRequired% +选定驱动器的可用空间: %SpaceAvailable% + + + + + +115 +Select Shortcut Folder +2 +Select Shortcut Folder +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +%AppShortcutFolderName% + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +203 +1 +1 +0 +0 + + +2 +211 +1 +1 +1 +0 + + +4 +501 +1 +1 +2 +0 +1 +1 + +4 +1 + + +5 +600 +1 +1 +35 +1 +600 +601 + + +5 +601 +1 +1 +40 +0 +600 +601 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Shortcut Folder +Where would you like the shortcuts to be installed? +&Next > +< &Back +&Cancel +&Help +The shortcut icons will be created in the folder indicated below. If you don't want to use the default folder, you can either type a new name, or select an existing folder from the list. +Shortcut Folder: +Install shortcuts for current user only +Make shortcuts available to all users +%AppShortcutFolderName% + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +快捷方式文件夹 +您想将快捷方式安装到何处? +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +快捷方式图标将在下面指出的文件夹中创建。如果您不想使用默认文件夹,您可以键入新的名称,或从列表中选择现有的文件夹。 +快捷方式文件夹: +只对当前用户安装快捷方式 +使快捷方式对所有用户都可用 +%AppShortcutFolderName% + + + + + +100 +Ready to Install +2 +Ready to Install +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +1 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +200 +1 +1 +0 +0 + + +2 +300 +0 +1 +1 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Ready to Install +You are now ready to install %ProductName% %ProductVer% +&Next > +< &Back +&Cancel +&Help +The installer now has enough information to install %ProductName% on your computer. + + +The following settings will be used: + +Install folder: %AppFolder% + +Shortcut folder: %AppShortcutFolderName% + + +Please click Next to proceed with the installation. +Title + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +准备安装 +现在您正准备安装 %ProductName% %ProductVer% +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +现在安装程序已有足够的信息将 %ProductName% 安装到您的计算机中。 + + +将使用以下设置: + +安装文件夹: %AppFolder% + +快捷方式文件夹: %AppShortcutFolderName% + + +请单击“下一步”继续安装。 +标题 + + + + + + +1 + + +130 +One Progress Bar (While Installing) +2 +One Progress Bar (While Installing) +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +1 + + +On Preload + + + + + + +On Progress +number e_Stage, string e_CurrentItemText, number e_CurrentItemPct, number e_StagePct + + + + + +On Cancel + + + + + + + + +1 +102 +1 +1 +78 +1 + + +2 +203 +1 +1 +1 +0 + + +2 +211 +1 +1 +2 +0 + + +2 +212 +1 +1 +3 +0 + + +7 +900 +1 +1 +4 + +0 +100 +1 + + +2 +213 +0 +1 +2 +0 + + +2 +214 +0 +1 +3 +0 + + +7 +901 +0 +1 +4 + +0 +100 +0 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Installing %ProductName% +Please wait... +&Cancel + + + + +Progress Two +Performing Actions... + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +正在安装 %ProductName% +请稍候... +取消(&C) + + + + +进程二 +正在执行动作... + + + + + + + + + +100 +Finished Install +1 +Finished Install +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +0 +-9 +1 + + +2 +200 +1 +1 +0 +0 + + +2 +300 +1 +1 +1 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Setup +Installation Finished +The installation has completed successfully. +&Finish +< &Back +&Cancel +&Help +The %ProductName% %ProductVer% installation is complete. + +Thank you for choosing %ProductName%! + +Please click Finish to exit this installer. + +Installation Successful + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 安装程序 +安装已完成 +安装已成功完成。 +完成(&F) +< 返回(&B) +取消(&C) +帮助(&H) +%ProductName% %ProductVer% 安装已完成。 + +感谢您选择 %ProductName%! + +请单击“完成”退出该安装程序。 + +安装成功 + + + + + + + + +List 1 + +All + + + + + +1 +uninstall.xml +%AppFolder%\Uninstall +%AppFolder%\uninstall.exe +1 +0 +0 + +0 +0 +1 +008080 +b4c2e3 +5971b6 + +0 + +0 +0 +%ProductName% Uninstall + + +Arial +0 +-37 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +v%ProductVer% + + +Arial +0 +-18 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +
%Copyright% %CompanyName%. All rights reserved. %CompanyURL%
+ + +Arial +0 +-16 +400 +0 +0 +0 +1 + + +ffffff +000000 +0 +1 +
+1 +1 +1 +1 +Microsoft.DesktopAppInstaller +%ProductName% +1 +%AppFolder%\appinstaller.exe +1 +%CompanyName% +%CompanyURL% +%CompanyName% Support Department +%CompanyURL% +%ProductVer% + + + + + +%AppFolder% + + +1 +Uninstall +Removes %ProductName% from your computer. +1 +%AppFolder%\uninstall_icon.ico +0 +1 +%TempFolder%\%ProductName% Uninstall Log.txt +0 +0 +1 + + +100 +Welcome to Uninstall +1 +Welcome to Uninstall +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +1 +-9 +1 + + +2 +200 +1 +1 +1 +0 + + +2 +300 +1 +1 +0 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Uninstaller +Welcome +Welcome to the uninstaller for %ProductName% %ProductVer% +&Next > +< &Back +&Cancel +&Help +This program will uninstall %ProductName% %ProductVer%. + +If %ProductName% is currently running, please close it before proceeding with the uninstallation. + +Otherwise, click Next to continue. + +Uninstall %ProductName% + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 卸载程序 +欢迎 +欢迎使用 %ProductName% %ProductVer% 卸载程序 +下一步(&N) > +< 返回(&B) +取消(&C) +帮助(&H) +该程序将卸载 %ProductName% %ProductVer%。 + +如果 %ProductName% 当前正在运行,继续卸载之前请将其关闭。 + +否则,请单击“下一步”继续。 + +卸载 %ProductName% + + + + + + +1 + + +130 +One Progress Bar (While Uninstalling) +2 +One Progress Bar (While Uninstalling) +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + +1 + + +On Preload + + + + + + +On Progress +number e_Stage, string e_CurrentItemText, number e_CurrentItemPct, number e_StagePct + + + + + +On Cancel + + + + + + + + +1 +102 +1 +1 +78 +1 + + +2 +203 +1 +1 +1 +0 + + +2 +211 +1 +1 +2 +0 + + +2 +212 +1 +1 +3 +0 + + +7 +900 +1 +1 +4 + +0 +100 +1 + + +2 +213 +0 +1 +2 +0 + + +2 +214 +0 +1 +3 +0 + + +7 +901 +0 +1 +4 + +0 +100 +0 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Uninstaller +Removing %ProductName% +Please wait... +&Cancel + + + + +Progress Two +Performing Actions... + + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 卸载程序 +正在移除 %ProductName% +请稍候... +取消(&C) + + + + +进程二 +正在执行动作... + + + + + + + + + +100 +Finished Uninstall +1 +Finished Uninstall +0 + +0 +ffffff +ece9d8 +ece9d8 +000000 +000000 +ffffff +ece9d8 +ece9d8 +ffffff +aca899 +000000 +000000 +aca899 +316ac5 +716f64 +Developer_top.jpg +Developer_side.jpg +Developer_body.jpg +0 +0 +1 +0 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +700 +0 +0 +0 +1 + + +Arial +0 +-24 +700 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + +Arial +0 +-13 +400 +0 +0 +0 +1 + + + +0 +15 +15 +15 +15 + + +1 +15 +15 +15 +15 + + +2 +15 +15 +15 +15 + +10 +10 +497 +362 + + + +On Preload + + + + + + +On Back + + + + + + +On Next + + + + + + +On Cancel + + + + + + +On Help + + + + + + +On Ctrl Message +number e_CtrlID, number e_MsgID, table e_Details + + + + + + + +1 +103 +0 +0 +75 +1 + + +1 +101 +1 +0 +76 +1 + + +1 +100 +1 +1 +-10 +1 + + +1 +102 +1 +0 +-9 +1 + + +2 +200 +1 +1 +0 +0 + + +2 +300 +1 +1 +1 +1 + + + + + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +%ProductName% Uninstaller +Uninstallation Finished +The uninstallation has completed successfully. +&Finish +< &Back +&Cancel +&Help +%ProductName% %ProductVer% has been uninstalled. + +Please click Finish to exit. + +Uninstallation Successful + + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + +%ProductName% 卸载程序 +卸载已完成 +卸载已成功完成。 +完成(&F) +< 返回(&B) +取消(&C) +帮助(&H) +%ProductName% %ProductVer% 已被卸载。 + +请单击“完成”退出。 + +卸载成功 + + + + + + + +在启动时 + + + + + + +On Post Uninstall + + + + + + +
+ + +1 +%TempFolder%\%ProductName% Setup Log.txt +0 +1 + +0 +0 +0 +1 +2 + +0 +0 +1 +008080 +b4c2e3 +5971b6 + +1 +%TempLaunchFolder%\main.ico +0 +0 +%ProductName% + + +Arial +0 +-37 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +v%ProductVer% + + +Arial +0 +-18 +700 +1 +0 +0 +1 + + +ffffff +000000 +0 +1 +
%Copyright%. All rights reserved. %CompanyURL%
+ + +Arial +0 +-16 +400 +0 +0 +0 +1 + + +ffffff +000000 +0 +1 +
+ +0 +0 +30 +30 +1 +1767105338 +0 +0 +1 +1 +2 +1 +0 +03F9811E-4657-4757-A24D-570C64F8ABB6 +0 +%CompanyName% +%CompanyURL% + + + + + +32768 +65535 +65535 +65535 +0 +0 +0 +0 +0 +0 +65535 +65535 +65535 +65535 +65535 +65535 + +0 +0 +0 +0 +1 +0 + + +Developer +New Project + + + +Copyright 2025 + + +9.5.3.0 +9.5.3.0 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\shared + +0 + + + + + + +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\appinstaller\res\icons\main.ico +1 +0 + +All + + + + + +全局函数 + + + + + + +在安装后 + + + + + + +
+ + +English +1 +9 + +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 + + + +Chinese (Simplified) +0 +4 + +2 +3 +4 +5 + + + + + +%ProductName% +Desktop App Installer +1 + + +%CompanyName% +Windows Modern +1 + + +%ProductVer% +0.1.0.0 +1 + + +%Copyright% +Copyright (C)2025 %CompanyName% +1 + + +%CompanyURL% + +1 + + +%WindowTitle% +%ProductName% Setup +1 + + +%WindowTitleUninstall% +%ProductName% Uninstaller +1 + + +%AppFolder% +%ProgramFilesFolder%\%ProductName% +2 + + +%AppShortcutFolderName% +%ProductName% +2 + + + + +Default + + +0 + + +0 +InstallerSetup.exe +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\Generated +0 +0 +0 +0 +0 +0 + +1 + + + + + +1 + + +0 + + + + + +1 +E:\Profiles\Bruce\Documents\Visual Studio 2015\Projects\AppInstallerReset\appinstaller\res\icons\main.ico +9.5.3.0 +9.5.3.0 +Indigo Rose Corporation +Setup Factory Runtime +Created with Setup Factory +sf_rt +Setup Application +Setup Engine Copyright ?1992-2019 Indigo Rose Corporation +Setup Factory is a trademark of Indigo Rose Corporation + + +0 + + + + + + +#SUFDIR#\Includes\Scripts\_SUF70_Global_Functions.lua +1 + +All + + + +
\ No newline at end of file diff --git a/others/uninstall_icon.ico b/others/uninstall_icon.ico new file mode 100644 index 0000000..1745b27 Binary files /dev/null and b/others/uninstall_icon.ico differ diff --git a/reslib/reslib.rc b/reslib/reslib.rc index 5ef5947..a495608 100644 Binary files a/reslib/reslib.rc and b/reslib/reslib.rc differ diff --git a/reslib/resource.h b/reslib/resource.h index 050914c..c4732a4 100644 Binary files a/reslib/resource.h and b/reslib/resource.h differ diff --git a/settings/download.h b/settings/download.h new file mode 100644 index 0000000..bc0599c --- /dev/null +++ b/settings/download.h @@ -0,0 +1,239 @@ +#pragma once +#include +#include +#include +#include "strcode.h" +#include "mpstr.h" +#include +#include +#include + +// Generated by ChatGTP + +using namespace System; +using namespace System::Threading; +using namespace System::Reflection; +#include +#include + +std::wstring GetLastErrorString () +{ + DWORD errCode = GetLastError (); + if (errCode == 0) + return L"No error"; + + wchar_t* msgBuffer = nullptr; + + // FORMAT_MESSAGE_ALLOCATE_BUFFER: 让系统分配缓冲区 + // FORMAT_MESSAGE_FROM_SYSTEM: 从系统获取错误信息 + // FORMAT_MESSAGE_IGNORE_INSERTS: 忽略 %1 %2 + DWORD size = FormatMessageW ( + FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, + nullptr, + errCode, + 0, // 默认语言 + (LPWSTR)&msgBuffer, + 0, + nullptr + ); + + std::wstring msg; + if (size && msgBuffer) + { + msg = msgBuffer; + LocalFree (msgBuffer); // 释放缓冲区 + } + else + { + msg = L"Unknown error code: " + std::to_wstring (errCode); + } + return msg; +} + +public ref class DownloadHelper +{ + public: + static void DownloadFile ( + String^ httpUrl, + String^ savePath, + Object^ onProgress, + Object^ onComplete, + Object^ onError) + { + DownloadHelper^ obj = gcnew DownloadHelper (); + obj->m_url = httpUrl; + obj->m_savePath = savePath; + obj->cbProgress = onProgress; + obj->cbComplete = onComplete; + obj->cbError = onError; + + Thread^ th = gcnew Thread (gcnew ThreadStart (obj, &DownloadHelper::Worker)); + th->IsBackground = true; + th->Start (); + } + + private: + void Worker () + { + std::wstring url = MPStringToStdW (m_url); + std::wstring outPath = MPStringToStdW (m_savePath); + + HINTERNET hInternet = InternetOpenW (L"MyDownloader", + INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); + + if (!hInternet) + { + ReportError (outPath, L"InternetOpenW Failed: " + GetLastErrorString ()); + return; + } + + HINTERNET hFile = InternetOpenUrlW ( + hInternet, + url.c_str (), + NULL, + 0, + INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE, + 0 + ); + + if (!hFile) + { + InternetCloseHandle (hInternet); + ReportError (outPath, L"InternetOpenUrlW Failed: " + GetLastErrorString ()); + return; + } + + DWORD fileSize = 0; + DWORD len = sizeof (fileSize); + HttpQueryInfoW (hFile, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, + &fileSize, &len, NULL); + + HANDLE hOut = CreateFileW (outPath.c_str (), GENERIC_WRITE, 0, + NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + + if (hOut == INVALID_HANDLE_VALUE) + { + InternetCloseHandle (hFile); + InternetCloseHandle (hInternet); + ReportError (outPath, L"Cannot create output file: " + GetLastErrorString ()); + return; + } + + BYTE buffer [8192]; + DWORD bytesRead = 0; + DWORD bytesWritten = 0; + long long received = 0; + + auto t0 = std::chrono::high_resolution_clock::now (); + + while (InternetReadFile (hFile, buffer, sizeof (buffer), &bytesRead) && bytesRead > 0) + { + WriteFile (hOut, buffer, bytesRead, &bytesWritten, NULL); + received += bytesRead; + + // 计算速度 + auto t1 = std::chrono::high_resolution_clock::now (); + double sec = std::chrono::duration (t1 - t0).count (); + long long speed = (long long)(received / (sec > 0 ? sec : 1)); + + ReportProgress (received, fileSize, speed); + } + + CloseHandle (hOut); + InternetCloseHandle (hFile); + InternetCloseHandle (hInternet); + + ReportComplete (outPath, received); + } + + // ---------------- 回调组装 JSON ---------------- + + void ReportProgress (long long received, long long total, long long speed) + { + if (!cbProgress) return; + + rapidjson::StringBuffer buf; + rapidjson::Writer w (buf); + + w.StartObject (); + w.Key ("received"); w.Uint64 (received); + w.Key ("total"); w.Uint64 (total); + w.Key ("speed"); w.Uint64 (speed); + w.Key ("progress"); w.Double (received / (double)total * 100); + w.EndObject (); + + CallJS (cbProgress, CStringToMPString (StringToWString (buf.GetString (), CP_UTF8))); + } + + void ReportComplete (const std::wstring& file, long long size) + { + if (!cbComplete) return; + + rapidjson::StringBuffer buf; + rapidjson::Writer w (buf); + + w.StartObject (); + w.Key ("file"); w.String (WStringToString (file, CP_UTF8).c_str ()); + w.Key ("status"); w.String ("ok"); + w.Key ("size"); w.Uint64 (size); + w.EndObject (); + + CallJS (cbComplete, CStringToMPString (StringToWString (buf.GetString (), CP_UTF8))); + } + + void ReportError (const std::wstring& file, const std::wstring &reason) + { + if (!cbError) return; + + rapidjson::StringBuffer buf; + rapidjson::Writer w (buf); + + w.StartObject (); + w.Key ("file"); w.String (WStringToString (file, CP_UTF8).c_str ()); + w.Key ("status"); w.String ("failed"); + w.Key ("reason"); w.String (WStringToString (reason, CP_UTF8).c_str ()); + w.EndObject (); + + CallJS (cbError, CStringToMPString (StringToWString (buf.GetString (), CP_UTF8))); + } + + // ---------------- 调用 JS 回调 ---------------- + void CallJS (Object^ jsFunc, String^ arg) + { + if (!jsFunc) return; + try + { + jsFunc->GetType ()->InvokeMember ( + "call", + BindingFlags::InvokeMethod, + nullptr, + jsFunc, + gcnew array{ 1, arg } + ); + } + catch (...) + { + // 失败可忽略 + } + } + + private: + String^ m_url; + String^ m_savePath; + + Object^ cbProgress; + Object^ cbComplete; + Object^ cbError; +}; + +using namespace System::Runtime::InteropServices; +[ComVisible (true)] +public ref class _I_Download +{ + public: + void WorkAsync (String ^httpurl, String ^saveFilePath, Object ^onComplete, Object ^onError, Object ^onProgress) + { + auto download = gcnew DownloadHelper (); + download->DownloadFile (httpurl, saveFilePath, onProgress, onComplete, onError); + } +}; \ No newline at end of file diff --git a/settings/main.cpp b/settings/main.cpp index 5d87bbb..2ae70cf 100644 --- a/settings/main.cpp +++ b/settings/main.cpp @@ -12,6 +12,7 @@ #include #include #include +#include "download.h" #include "module.h" #include "themeinfo.h" #include "mpstr.h" @@ -234,7 +235,7 @@ public ref class _I_Bridge_Base protected: _I_String ^str = gcnew _I_String (); _I_InitConfig ^initconfig = gcnew _I_InitConfig (); - _I_Storage ^storage; + _I_Storage ^storage = gcnew _I_Storage (); public: property _I_String ^String { _I_String ^get () { return str; }} property _I_InitConfig ^Config { _I_InitConfig ^get () { return initconfig; }} @@ -682,6 +683,7 @@ public ref class MainHtmlWnd: public System::Windows::Forms::Form, public IScrip _I_IEFrame ^ieframe; _I_System3 ^sys; _I_VisualElements2 ^ve; + _I_Download ^download; public: IBridge (MainHtmlWnd ^wnd): wndinst (wnd), _I_Bridge_Base2 (wnd) { @@ -689,10 +691,12 @@ public ref class MainHtmlWnd: public System::Windows::Forms::Form, public IScrip sys = gcnew _I_System3 (wnd); storage = gcnew _I_Storage (); ve = gcnew _I_VisualElements2 (); + download = gcnew _I_Download (); } property _I_IEFrame ^IEFrame { _I_IEFrame ^get () { return ieframe; }} property _I_System3 ^System { _I_System3 ^get () { return sys; }} property _I_VisualElements2 ^VisualElements { _I_VisualElements2 ^get () { return ve; } } + property _I_Download ^Download { _I_Download ^get () { return download; }} }; protected: property WebBrowser ^WebUI { WebBrowser ^get () { return this->webui; } } diff --git a/settings/settings.vcxproj b/settings/settings.vcxproj index 773f7fe..c4a1de0 100644 --- a/settings/settings.vcxproj +++ b/settings/settings.vcxproj @@ -97,7 +97,7 @@ Windows true - shlwapi.lib;version.lib;dwmapi.lib;%(AdditionalDependencies) + shlwapi.lib;version.lib;dwmapi.lib;wininet.lib;%(AdditionalDependencies) @@ -130,7 +130,7 @@ true true true - shlwapi.lib;version.lib;dwmapi.lib;%(AdditionalDependencies) + shlwapi.lib;version.lib;dwmapi.lib;wininet.lib;%(AdditionalDependencies) @@ -184,6 +184,7 @@ + diff --git a/settings/settings.vcxproj.filters b/settings/settings.vcxproj.filters index 1dd8c2b..8934623 100644 --- a/settings/settings.vcxproj.filters +++ b/settings/settings.vcxproj.filters @@ -77,6 +77,9 @@ 澶存枃浠 + + 澶存枃浠 + diff --git a/shared/html/js/animation.js b/shared/html/js/animation.js index cbf69cb..9cf6b3a 100644 --- a/shared/html/js/animation.js +++ b/shared/html/js/animation.js @@ -218,6 +218,11 @@ containerId = container.id; } } else document.getElementById(containerId); + if (shouldAnimate == true) { + container.setAttribute("data-start-loading", true); + } else { + container.removeAttribute("data-start-loading"); + } var textNode = container.firstChild; if (!textNode || textNode.nodeType !== 3) { textNode = document.createTextNode(""); diff --git a/shared/html/js/color.js b/shared/html/js/color.js index fa7b171..f8ba2e9 100644 --- a/shared/html/js/color.js +++ b/shared/html/js/color.js @@ -473,63 +473,6 @@ this.HWB = new HWB(this); this.stringify = function() { return this.hex; }; } - /** - * 瑙f瀽棰滆壊瀛楃涓 - * @param {string} str 棰滆壊瀛楃涓 - * @returns {Color} 瑙f瀽寰楀埌鐨勯鑹插璞 - */ - Color.parse = function(str) { - var json = JSON.parse(window.external.IEFrame.ParseHtmlColor(str)); - return new Color(json.r, json.g, json.b, json.a); - } - Color.getSuitableForegroundTextColor = function(backgroundColor, foregroundColorArray) { - // 灏 0鈥255 杞负 W3C 鐨 0鈥1锛屽苟鍋 gamma 鏍℃ - function gammaCorrect(c) { - c /= 255; - if (c <= 0.03928) return c / 12.92; - return Math.pow((c + 0.055) / 1.055, 2.4); - } - // 璁$畻鐩稿浜害 L锛0鈥1锛 - function relativeLuminance(color) { - var R = gammaCorrect(color.red); - var G = gammaCorrect(color.green); - var B = gammaCorrect(color.blue); - return 0.2126 * R + 0.7152 * G + 0.0722 * B; - } - // 璁$畻瀵规瘮搴 (L1+0.05)/(L2+0.05) - function contrastRatio(l1, l2) { - var light = Math.max(l1, l2); - var dark = Math.min(l1, l2); - return (light + 0.05) / (dark + 0.05); - } - // 娣峰悎鑳屾櫙閫忔槑搴︼細鑳屾櫙 alpha 涓庣櫧鑹叉贩鍚 - function blendWithWhite(color) { - const a = (color.alpha !== undefined ? color.alpha : 255) / 255; - return { - red: color.red * a + 255 * (1 - a), - green: color.green * a + 255 * (1 - a), - blue: color.blue * a + 255 * (1 - a), - alpha: 255 - }; - } - // 閫忔槑鑳屾櫙瑙嗕负涓庣櫧鑹插彔鍔 - const bg = blendWithWhite(backgroundColor); - const bgL = relativeLuminance(bg); - // 鎵惧嚭鍜岃儗鏅姣斿害鏈楂樼殑鍓嶆櫙鑹 - let bestColor = null; - let bestContrast = -1; - for (var i = 0; i < foregroundColorArray.length; i++) { - var fg = foregroundColorArray[i]; - var fgBlended = blendWithWhite(fg); // 鑻ュ墠鏅篃鏈夐忔槑搴 - var fgL = relativeLuminance(fgBlended); - var cr = contrastRatio(bgL, fgL); - if (cr > bestContrast) { - bestContrast = cr; - bestColor = fg; - } - } - return bestColor; - } Color.Const = { white: new Color(255, 255, 255), black: new Color(0, 0, 0), @@ -541,6 +484,83 @@ magenta: new Color(255, 0, 255), transparent: new Color(0, 0, 0, 0), }; + /** + * 瑙f瀽棰滆壊瀛楃涓 + * @param {string} str 棰滆壊瀛楃涓 + * @returns {Color} 瑙f瀽寰楀埌鐨勯鑹插璞 + */ + Color.parse = function(str) { + var json = JSON.parse(window.external.IEFrame.ParseHtmlColor(str)); + return new Color(json.r, json.g, json.b, json.a); + } + Color.getSuitableForegroundTextColor = function(backgroundColor, foregroundColorArray) { + + function gammaCorrect(c) { + c /= 255; + if (c <= 0.03928) return c / 12.92; + return Math.pow((c + 0.055) / 1.055, 2.4); + } + + function relativeLuminance(color) { + var R = gammaCorrect(color.red); + var G = gammaCorrect(color.green); + var B = gammaCorrect(color.blue); + return 0.2126 * R + 0.7152 * G + 0.0722 * B; + } + + function blendWithWhite(color) { + var a = (color.alpha !== undefined ? color.alpha : 255) / 255; + return { + red: color.red * a + 255 * (1 - a), + green: color.green * a + 255 * (1 - a), + blue: color.blue * a + 255 * (1 - a), + alpha: 255 + }; + } + + // 璁$畻 RGB 娆ф皬璺濈锛岃 閲忚壊宸 + function colorDistance(c1, c2) { + var dr = c1.red - c2.red; + var dg = c1.green - c2.green; + var db = c1.blue - c2.blue; + return Math.sqrt(dr * dr + dg * dg + db * db); + } + + var bg = blendWithWhite(backgroundColor); + var bgL = relativeLuminance(bg); + + var bestScore = -Infinity; + var bestColor = null; + + for (var i = 0; i < foregroundColorArray.length; i++) { + var fg = foregroundColorArray[i]; + var fgBlended = blendWithWhite(fg); + var fgL = relativeLuminance(fgBlended); + + // 浜害宸 + var lumDiff = Math.abs(fgL - bgL); // 0~1 + + // 鑹插僵宸紙RGB娆ф皬璺濈锛0~441锛 + var colorDiff = colorDistance(fgBlended, bg) / Math.sqrt(3 * 255 * 255); + + // 缁煎悎寰楀垎 + // 楂樹寒搴﹀樊 + 鑹插僵宸洿楂 鈫 寰楀垎楂 + // 鍚屾椂閫傚綋鎯╃綒杩囨殫棰滆壊 + var score = lumDiff * 0.6 + colorDiff * 0.4; + + // 杞诲井鎯╃綒杩囨繁棰滆壊锛堣儗鏅祬鑹叉椂锛 + if (bgL > 0.8 && fgL < 0.3) score -= 0.1; + // 杞诲井鎯╃綒杩囨祬棰滆壊锛堣儗鏅繁鑹叉椂锛 + if (bgL < 0.2 && fgL > 0.9) score -= 0.05; + + if (score > bestScore) { + bestScore = score; + bestColor = fg; + } + } + + return bestColor; + }; module.exports = { Color: Color }; })(this); \ No newline at end of file diff --git a/shared/html/libs/markdown.js b/shared/html/libs/markdown.js new file mode 100644 index 0000000..d365cfa --- /dev/null +++ b/shared/html/libs/markdown.js @@ -0,0 +1,1725 @@ +// Released under MIT license +// Copyright (c) 2009-2010 Dominic Baggott +// Copyright (c) 2009-2010 Ash Berlin +// Copyright (c) 2011 Christoph Dorn (http://www.christophdorn.com) + +/*jshint browser:true, devel:true */ + +(function( expose ) { + +/** + * class Markdown + * + * Markdown processing in Javascript done right. We have very particular views + * on what constitutes 'right' which include: + * + * - produces well-formed HTML (this means that em and strong nesting is + * important) + * + * - has an intermediate representation to allow processing of parsed data (We + * in fact have two, both as [JsonML]: a markdown tree and an HTML tree). + * + * - is easily extensible to add new dialects without having to rewrite the + * entire parsing mechanics + * + * - has a good test suite + * + * This implementation fulfills all of these (except that the test suite could + * do with expanding to automatically run all the fixtures from other Markdown + * implementations.) + * + * ##### Intermediate Representation + * + * *TODO* Talk about this :) Its JsonML, but document the node names we use. + * + * [JsonML]: http://jsonml.org/ "JSON Markup Language" + **/ +var Markdown = expose.Markdown = function(dialect) { + switch (typeof dialect) { + case "undefined": + this.dialect = Markdown.dialects.Gruber; + break; + case "object": + this.dialect = dialect; + break; + default: + if ( dialect in Markdown.dialects ) { + this.dialect = Markdown.dialects[dialect]; + } + else { + throw new Error("Unknown Markdown dialect '" + String(dialect) + "'"); + } + break; + } + this.em_state = []; + this.strong_state = []; + this.debug_indent = ""; +}; + +/** + * parse( markdown, [dialect] ) -> JsonML + * - markdown (String): markdown string to parse + * - dialect (String | Dialect): the dialect to use, defaults to gruber + * + * Parse `markdown` and return a markdown document as a Markdown.JsonML tree. + **/ +expose.parse = function( source, dialect ) { + // dialect will default if undefined + var md = new Markdown( dialect ); + return md.toTree( source ); +}; + +/** + * toHTML( markdown, [dialect] ) -> String + * toHTML( md_tree ) -> String + * - markdown (String): markdown string to parse + * - md_tree (Markdown.JsonML): parsed markdown tree + * + * Take markdown (either as a string or as a JsonML tree) and run it through + * [[toHTMLTree]] then turn it into a well-formated HTML fragment. + **/ +expose.toHTML = function toHTML( source , dialect , options ) { + var input = expose.toHTMLTree( source , dialect , options ); + + return expose.renderJsonML( input ); +}; + +/** + * toHTMLTree( markdown, [dialect] ) -> JsonML + * toHTMLTree( md_tree ) -> JsonML + * - markdown (String): markdown string to parse + * - dialect (String | Dialect): the dialect to use, defaults to gruber + * - md_tree (Markdown.JsonML): parsed markdown tree + * + * Turn markdown into HTML, represented as a JsonML tree. If a string is given + * to this function, it is first parsed into a markdown tree by calling + * [[parse]]. + **/ +expose.toHTMLTree = function toHTMLTree( input, dialect , options ) { + // convert string input to an MD tree + if ( typeof input ==="string" ) input = this.parse( input, dialect ); + + // Now convert the MD tree to an HTML tree + + // remove references from the tree + var attrs = extract_attr( input ), + refs = {}; + + if ( attrs && attrs.references ) { + refs = attrs.references; + } + + var html = convert_tree_to_html( input, refs , options ); + merge_text_nodes( html ); + return html; +}; + +// For Spidermonkey based engines +function mk_block_toSource() { + return "Markdown.mk_block( " + + uneval(this.toString()) + + ", " + + uneval(this.trailing) + + ", " + + uneval(this.lineNumber) + + " )"; +} + +// node +function mk_block_inspect() { + var util = require("util"); + return "Markdown.mk_block( " + + util.inspect(this.toString()) + + ", " + + util.inspect(this.trailing) + + ", " + + util.inspect(this.lineNumber) + + " )"; + +} + +var mk_block = Markdown.mk_block = function(block, trail, line) { + // Be helpful for default case in tests. + if ( arguments.length == 1 ) trail = "\n\n"; + + var s = new String(block); + s.trailing = trail; + // To make it clear its not just a string + s.inspect = mk_block_inspect; + s.toSource = mk_block_toSource; + + if ( line != undefined ) + s.lineNumber = line; + + return s; +}; + +function count_lines( str ) { + var n = 0, i = -1; + while ( ( i = str.indexOf("\n", i + 1) ) !== -1 ) n++; + return n; +} + +// Internal - split source into rough blocks +Markdown.prototype.split_blocks = function splitBlocks( input, startLine ) { + input = input.replace(/(\r\n|\n|\r)/g, "\n"); + // [\s\S] matches _anything_ (newline or space) + // [^] is equivalent but doesn't work in IEs. + var re = /([\s\S]+?)($|\n#|\n(?:\s*\n|$)+)/g, + blocks = [], + m; + + var line_no = 1; + + if ( ( m = /^(\s*\n)/.exec(input) ) != null ) { + // skip (but count) leading blank lines + line_no += count_lines( m[0] ); + re.lastIndex = m[0].length; + } + + while ( ( m = re.exec(input) ) !== null ) { + if (m[2] == "\n#") { + m[2] = "\n"; + re.lastIndex--; + } + blocks.push( mk_block( m[1], m[2], line_no ) ); + line_no += count_lines( m[0] ); + } + + return blocks; +}; + +/** + * Markdown#processBlock( block, next ) -> undefined | [ JsonML, ... ] + * - block (String): the block to process + * - next (Array): the following blocks + * + * Process `block` and return an array of JsonML nodes representing `block`. + * + * It does this by asking each block level function in the dialect to process + * the block until one can. Succesful handling is indicated by returning an + * array (with zero or more JsonML nodes), failure by a false value. + * + * Blocks handlers are responsible for calling [[Markdown#processInline]] + * themselves as appropriate. + * + * If the blocks were split incorrectly or adjacent blocks need collapsing you + * can adjust `next` in place using shift/splice etc. + * + * If any of this default behaviour is not right for the dialect, you can + * define a `__call__` method on the dialect that will get invoked to handle + * the block processing. + */ +Markdown.prototype.processBlock = function processBlock( block, next ) { + var cbs = this.dialect.block, + ord = cbs.__order__; + + if ( "__call__" in cbs ) { + return cbs.__call__.call(this, block, next); + } + + for ( var i = 0; i < ord.length; i++ ) { + //D:this.debug( "Testing", ord[i] ); + var res = cbs[ ord[i] ].call( this, block, next ); + if ( res ) { + //D:this.debug(" matched"); + if ( !isArray(res) || ( res.length > 0 && !( isArray(res[0]) ) ) ) + this.debug(ord[i], "didn't return a proper array"); + //D:this.debug( "" ); + return res; + } + } + + // Uhoh! no match! Should we throw an error? + return []; +}; + +Markdown.prototype.processInline = function processInline( block ) { + return this.dialect.inline.__call__.call( this, String( block ) ); +}; + +/** + * Markdown#toTree( source ) -> JsonML + * - source (String): markdown source to parse + * + * Parse `source` into a JsonML tree representing the markdown document. + **/ +// custom_tree means set this.tree to `custom_tree` and restore old value on return +Markdown.prototype.toTree = function toTree( source, custom_root ) { + var blocks = source instanceof Array ? source : this.split_blocks( source ); + + // Make tree a member variable so its easier to mess with in extensions + var old_tree = this.tree; + try { + this.tree = custom_root || this.tree || [ "markdown" ]; + + blocks: + while ( blocks.length ) { + var b = this.processBlock( blocks.shift(), blocks ); + + // Reference blocks and the like won't return any content + if ( !b.length ) continue blocks; + + this.tree.push.apply( this.tree, b ); + } + return this.tree; + } + finally { + if ( custom_root ) { + this.tree = old_tree; + } + } +}; + +// Noop by default +Markdown.prototype.debug = function () { + var args = Array.prototype.slice.call( arguments); + args.unshift(this.debug_indent); + if ( typeof print !== "undefined" ) + print.apply( print, args ); + if ( typeof console !== "undefined" && typeof console.log !== "undefined" ) + console.log.apply( null, args ); +} + +Markdown.prototype.loop_re_over_block = function( re, block, cb ) { + // Dont use /g regexps with this + var m, + b = block.valueOf(); + + while ( b.length && (m = re.exec(b) ) != null ) { + b = b.substr( m[0].length ); + cb.call(this, m); + } + return b; +}; + +/** + * Markdown.dialects + * + * Namespace of built-in dialects. + **/ +Markdown.dialects = {}; + +/** + * Markdown.dialects.Gruber + * + * The default dialect that follows the rules set out by John Gruber's + * markdown.pl as closely as possible. Well actually we follow the behaviour of + * that script which in some places is not exactly what the syntax web page + * says. + **/ +Markdown.dialects.Gruber = { + block: { + atxHeader: function atxHeader( block, next ) { + var m = block.match( /^(#{1,6})\s*(.*?)\s*#*\s*(?:\n|$)/ ); + + if ( !m ) return undefined; + + var header = [ "header", { level: m[ 1 ].length } ]; + Array.prototype.push.apply(header, this.processInline(m[ 2 ])); + + if ( m[0].length < block.length ) + next.unshift( mk_block( block.substr( m[0].length ), block.trailing, block.lineNumber + 2 ) ); + + return [ header ]; + }, + + setextHeader: function setextHeader( block, next ) { + var m = block.match( /^(.*)\n([-=])\2\2+(?:\n|$)/ ); + + if ( !m ) return undefined; + + var level = ( m[ 2 ] === "=" ) ? 1 : 2; + var header = [ "header", { level : level }, m[ 1 ] ]; + + if ( m[0].length < block.length ) + next.unshift( mk_block( block.substr( m[0].length ), block.trailing, block.lineNumber + 2 ) ); + + return [ header ]; + }, + + code: function code( block, next ) { + // | Foo + // |bar + // should be a code block followed by a paragraph. Fun + // + // There might also be adjacent code block to merge. + + var ret = [], + re = /^(?: {0,3}\t| {4})(.*)\n?/, + lines; + + // 4 spaces + content + if ( !block.match( re ) ) return undefined; + + block_search: + do { + // Now pull out the rest of the lines + var b = this.loop_re_over_block( + re, block.valueOf(), function( m ) { ret.push( m[1] ); } ); + + if ( b.length ) { + // Case alluded to in first comment. push it back on as a new block + next.unshift( mk_block(b, block.trailing) ); + break block_search; + } + else if ( next.length ) { + // Check the next block - it might be code too + if ( !next[0].match( re ) ) break block_search; + + // Pull how how many blanks lines follow - minus two to account for .join + ret.push ( block.trailing.replace(/[^\n]/g, "").substring(2) ); + + block = next.shift(); + } + else { + break block_search; + } + } while ( true ); + + return [ [ "code_block", ret.join("\n") ] ]; + }, + + horizRule: function horizRule( block, next ) { + // this needs to find any hr in the block to handle abutting blocks + var m = block.match( /^(?:([\s\S]*?)\n)?[ \t]*([-_*])(?:[ \t]*\2){2,}[ \t]*(?:\n([\s\S]*))?$/ ); + + if ( !m ) { + return undefined; + } + + var jsonml = [ [ "hr" ] ]; + + // if there's a leading abutting block, process it + if ( m[ 1 ] ) { + jsonml.unshift.apply( jsonml, this.processBlock( m[ 1 ], [] ) ); + } + + // if there's a trailing abutting block, stick it into next + if ( m[ 3 ] ) { + next.unshift( mk_block( m[ 3 ] ) ); + } + + return jsonml; + }, + + // There are two types of lists. Tight and loose. Tight lists have no whitespace + // between the items (and result in text just in the
  • ) and loose lists, + // which have an empty line between list items, resulting in (one or more) + // paragraphs inside the
  • . + // + // There are all sorts weird edge cases about the original markdown.pl's + // handling of lists: + // + // * Nested lists are supposed to be indented by four chars per level. But + // if they aren't, you can get a nested list by indenting by less than + // four so long as the indent doesn't match an indent of an existing list + // item in the 'nest stack'. + // + // * The type of the list (bullet or number) is controlled just by the + // first item at the indent. Subsequent changes are ignored unless they + // are for nested lists + // + lists: (function( ) { + // Use a closure to hide a few variables. + var any_list = "[*+-]|\\d+\\.", + bullet_list = /[*+-]/, + number_list = /\d+\./, + // Capture leading indent as it matters for determining nested lists. + is_list_re = new RegExp( "^( {0,3})(" + any_list + ")[ \t]+" ), + indent_re = "(?: {0,3}\\t| {4})"; + + // TODO: Cache this regexp for certain depths. + // Create a regexp suitable for matching an li for a given stack depth + function regex_for_depth( depth ) { + + return new RegExp( + // m[1] = indent, m[2] = list_type + "(?:^(" + indent_re + "{0," + depth + "} {0,3})(" + any_list + ")\\s+)|" + + // m[3] = cont + "(^" + indent_re + "{0," + (depth-1) + "}[ ]{0,4})" + ); + } + function expand_tab( input ) { + return input.replace( / {0,3}\t/g, " " ); + } + + // Add inline content `inline` to `li`. inline comes from processInline + // so is an array of content + function add(li, loose, inline, nl) { + if ( loose ) { + li.push( [ "para" ].concat(inline) ); + return; + } + // Hmmm, should this be any block level element or just paras? + var add_to = li[li.length -1] instanceof Array && li[li.length - 1][0] == "para" + ? li[li.length -1] + : li; + + // If there is already some content in this list, add the new line in + if ( nl && li.length > 1 ) inline.unshift(nl); + + for ( var i = 0; i < inline.length; i++ ) { + var what = inline[i], + is_str = typeof what == "string"; + if ( is_str && add_to.length > 1 && typeof add_to[add_to.length-1] == "string" ) { + add_to[ add_to.length-1 ] += what; + } + else { + add_to.push( what ); + } + } + } + + // contained means have an indent greater than the current one. On + // *every* line in the block + function get_contained_blocks( depth, blocks ) { + + var re = new RegExp( "^(" + indent_re + "{" + depth + "}.*?\\n?)*$" ), + replace = new RegExp("^" + indent_re + "{" + depth + "}", "gm"), + ret = []; + + while ( blocks.length > 0 ) { + if ( re.exec( blocks[0] ) ) { + var b = blocks.shift(), + // Now remove that indent + x = b.replace( replace, ""); + + ret.push( mk_block( x, b.trailing, b.lineNumber ) ); + } + else { + break; + } + } + return ret; + } + + // passed to stack.forEach to turn list items up the stack into paras + function paragraphify(s, i, stack) { + var list = s.list; + var last_li = list[list.length-1]; + + if ( last_li[1] instanceof Array && last_li[1][0] == "para" ) { + return; + } + if ( i + 1 == stack.length ) { + // Last stack frame + // Keep the same array, but replace the contents + last_li.push( ["para"].concat( last_li.splice(1, last_li.length - 1) ) ); + } + else { + var sublist = last_li.pop(); + last_li.push( ["para"].concat( last_li.splice(1, last_li.length - 1) ), sublist ); + } + } + + // The matcher function + return function( block, next ) { + var m = block.match( is_list_re ); + if ( !m ) return undefined; + + function make_list( m ) { + var list = bullet_list.exec( m[2] ) + ? ["bulletlist"] + : ["numberlist"]; + + stack.push( { list: list, indent: m[1] } ); + return list; + } + + + var stack = [], // Stack of lists for nesting. + list = make_list( m ), + last_li, + loose = false, + ret = [ stack[0].list ], + i; + + // Loop to search over block looking for inner block elements and loose lists + loose_search: + while ( true ) { + // Split into lines preserving new lines at end of line + var lines = block.split( /(?=\n)/ ); + + // We have to grab all lines for a li and call processInline on them + // once as there are some inline things that can span lines. + var li_accumulate = ""; + + // Loop over the lines in this block looking for tight lists. + tight_search: + for ( var line_no = 0; line_no < lines.length; line_no++ ) { + var nl = "", + l = lines[line_no].replace(/^\n/, function(n) { nl = n; return ""; }); + + // TODO: really should cache this + var line_re = regex_for_depth( stack.length ); + + m = l.match( line_re ); + //print( "line:", uneval(l), "\nline match:", uneval(m) ); + + // We have a list item + if ( m[1] !== undefined ) { + // Process the previous list item, if any + if ( li_accumulate.length ) { + add( last_li, loose, this.processInline( li_accumulate ), nl ); + // Loose mode will have been dealt with. Reset it + loose = false; + li_accumulate = ""; + } + + m[1] = expand_tab( m[1] ); + var wanted_depth = Math.floor(m[1].length/4)+1; + //print( "want:", wanted_depth, "stack:", stack.length); + if ( wanted_depth > stack.length ) { + // Deep enough for a nested list outright + //print ( "new nested list" ); + list = make_list( m ); + last_li.push( list ); + last_li = list[1] = [ "listitem" ]; + } + else { + // We aren't deep enough to be strictly a new level. This is + // where Md.pl goes nuts. If the indent matches a level in the + // stack, put it there, else put it one deeper then the + // wanted_depth deserves. + var found = false; + for ( i = 0; i < stack.length; i++ ) { + if ( stack[ i ].indent != m[1] ) continue; + list = stack[ i ].list; + stack.splice( i+1, stack.length - (i+1) ); + found = true; + break; + } + + if (!found) { + //print("not found. l:", uneval(l)); + wanted_depth++; + if ( wanted_depth <= stack.length ) { + stack.splice(wanted_depth, stack.length - wanted_depth); + //print("Desired depth now", wanted_depth, "stack:", stack.length); + list = stack[wanted_depth-1].list; + //print("list:", uneval(list) ); + } + else { + //print ("made new stack for messy indent"); + list = make_list(m); + last_li.push(list); + } + } + + //print( uneval(list), "last", list === stack[stack.length-1].list ); + last_li = [ "listitem" ]; + list.push(last_li); + } // end depth of shenegains + nl = ""; + } + + // Add content + if ( l.length > m[0].length ) { + li_accumulate += nl + l.substr( m[0].length ); + } + } // tight_search + + if ( li_accumulate.length ) { + add( last_li, loose, this.processInline( li_accumulate ), nl ); + // Loose mode will have been dealt with. Reset it + loose = false; + li_accumulate = ""; + } + + // Look at the next block - we might have a loose list. Or an extra + // paragraph for the current li + var contained = get_contained_blocks( stack.length, next ); + + // Deal with code blocks or properly nested lists + if ( contained.length > 0 ) { + // Make sure all listitems up the stack are paragraphs + forEach( stack, paragraphify, this); + + last_li.push.apply( last_li, this.toTree( contained, [] ) ); + } + + var next_block = next[0] && next[0].valueOf() || ""; + + if ( next_block.match(is_list_re) || next_block.match( /^ / ) ) { + block = next.shift(); + + // Check for an HR following a list: features/lists/hr_abutting + var hr = this.dialect.block.horizRule( block, next ); + + if ( hr ) { + ret.push.apply(ret, hr); + break; + } + + // Make sure all listitems up the stack are paragraphs + forEach( stack, paragraphify, this); + + loose = true; + continue loose_search; + } + break; + } // loose_search + + return ret; + }; + })(), + + blockquote: function blockquote( block, next ) { + if ( !block.match( /^>/m ) ) + return undefined; + + var jsonml = []; + + // separate out the leading abutting block, if any. I.e. in this case: + // + // a + // > b + // + if ( block[ 0 ] != ">" ) { + var lines = block.split( /\n/ ), + prev = [], + line_no = block.lineNumber; + + // keep shifting lines until you find a crotchet + while ( lines.length && lines[ 0 ][ 0 ] != ">" ) { + prev.push( lines.shift() ); + line_no++; + } + + var abutting = mk_block( prev.join( "\n" ), "\n", block.lineNumber ); + jsonml.push.apply( jsonml, this.processBlock( abutting, [] ) ); + // reassemble new block of just block quotes! + block = mk_block( lines.join( "\n" ), block.trailing, line_no ); + } + + + // if the next block is also a blockquote merge it in + while ( next.length && next[ 0 ][ 0 ] == ">" ) { + var b = next.shift(); + block = mk_block( block + block.trailing + b, b.trailing, block.lineNumber ); + } + + // Strip off the leading "> " and re-process as a block. + var input = block.replace( /^> ?/gm, "" ), + old_tree = this.tree, + processedBlock = this.toTree( input, [ "blockquote" ] ), + attr = extract_attr( processedBlock ); + + // If any link references were found get rid of them + if ( attr && attr.references ) { + delete attr.references; + // And then remove the attribute object if it's empty + if ( isEmpty( attr ) ) { + processedBlock.splice( 1, 1 ); + } + } + + jsonml.push( processedBlock ); + return jsonml; + }, + + referenceDefn: function referenceDefn( block, next) { + var re = /^\s*\[(.*?)\]:\s*(\S+)(?:\s+(?:(['"])(.*?)\3|\((.*?)\)))?\n?/; + // interesting matches are [ , ref_id, url, , title, title ] + + if ( !block.match(re) ) + return undefined; + + // make an attribute node if it doesn't exist + if ( !extract_attr( this.tree ) ) { + this.tree.splice( 1, 0, {} ); + } + + var attrs = extract_attr( this.tree ); + + // make a references hash if it doesn't exist + if ( attrs.references === undefined ) { + attrs.references = {}; + } + + var b = this.loop_re_over_block(re, block, function( m ) { + + if ( m[2] && m[2][0] == "<" && m[2][m[2].length-1] == ">" ) + m[2] = m[2].substring( 1, m[2].length - 1 ); + + var ref = attrs.references[ m[1].toLowerCase() ] = { + href: m[2] + }; + + if ( m[4] !== undefined ) + ref.title = m[4]; + else if ( m[5] !== undefined ) + ref.title = m[5]; + + } ); + + if ( b.length ) + next.unshift( mk_block( b, block.trailing ) ); + + return []; + }, + + para: function para( block, next ) { + // everything's a para! + return [ ["para"].concat( this.processInline( block ) ) ]; + } + } +}; + +Markdown.dialects.Gruber.inline = { + + __oneElement__: function oneElement( text, patterns_or_re, previous_nodes ) { + var m, + res, + lastIndex = 0; + + patterns_or_re = patterns_or_re || this.dialect.inline.__patterns__; + var re = new RegExp( "([\\s\\S]*?)(" + (patterns_or_re.source || patterns_or_re) + ")" ); + + m = re.exec( text ); + if (!m) { + // Just boring text + return [ text.length, text ]; + } + else if ( m[1] ) { + // Some un-interesting text matched. Return that first + return [ m[1].length, m[1] ]; + } + + var res; + if ( m[2] in this.dialect.inline ) { + res = this.dialect.inline[ m[2] ].call( + this, + text.substr( m.index ), m, previous_nodes || [] ); + } + // Default for now to make dev easier. just slurp special and output it. + res = res || [ m[2].length, m[2] ]; + return res; + }, + + __call__: function inline( text, patterns ) { + + var out = [], + res; + + function add(x) { + //D:self.debug(" adding output", uneval(x)); + if ( typeof x == "string" && typeof out[out.length-1] == "string" ) + out[ out.length-1 ] += x; + else + out.push(x); + } + + while ( text.length > 0 ) { + res = this.dialect.inline.__oneElement__.call(this, text, patterns, out ); + text = text.substr( res.shift() ); + forEach(res, add ) + } + + return out; + }, + + // These characters are intersting elsewhere, so have rules for them so that + // chunks of plain text blocks don't include them + "]": function () {}, + "}": function () {}, + + __escape__ : /^\\[\\`\*_{}\[\]()#\+.!\-]/, + + "\\": function escaped( text ) { + // [ length of input processed, node/children to add... ] + // Only esacape: \ ` * _ { } [ ] ( ) # * + - . ! + if ( this.dialect.inline.__escape__.exec( text ) ) + return [ 2, text.charAt( 1 ) ]; + else + // Not an esacpe + return [ 1, "\\" ]; + }, + + "![": function image( text ) { + + // Unlike images, alt text is plain text only. no other elements are + // allowed in there + + // ![Alt text](/path/to/img.jpg "Optional title") + // 1 2 3 4 <--- captures + var m = text.match( /^!\[(.*?)\][ \t]*\([ \t]*([^")]*?)(?:[ \t]+(["'])(.*?)\3)?[ \t]*\)/ ); + + if ( m ) { + if ( m[2] && m[2][0] == "<" && m[2][m[2].length-1] == ">" ) + m[2] = m[2].substring( 1, m[2].length - 1 ); + + m[2] = this.dialect.inline.__call__.call( this, m[2], /\\/ )[0]; + + var attrs = { alt: m[1], href: m[2] || "" }; + if ( m[4] !== undefined) + attrs.title = m[4]; + + return [ m[0].length, [ "img", attrs ] ]; + } + + // ![Alt text][id] + m = text.match( /^!\[(.*?)\][ \t]*\[(.*?)\]/ ); + + if ( m ) { + // We can't check if the reference is known here as it likely wont be + // found till after. Check it in md tree->hmtl tree conversion + return [ m[0].length, [ "img_ref", { alt: m[1], ref: m[2].toLowerCase(), original: m[0] } ] ]; + } + + // Just consume the '![' + return [ 2, "![" ]; + }, + + "[": function link( text ) { + + var orig = String(text); + // Inline content is possible inside `link text` + var res = Markdown.DialectHelpers.inline_until_char.call( this, text.substr(1), "]" ); + + // No closing ']' found. Just consume the [ + if ( !res ) return [ 1, "[" ]; + + var consumed = 1 + res[ 0 ], + children = res[ 1 ], + link, + attrs; + + // At this point the first [...] has been parsed. See what follows to find + // out which kind of link we are (reference or direct url) + text = text.substr( consumed ); + + // [link text](/path/to/img.jpg "Optional title") + // 1 2 3 <--- captures + // This will capture up to the last paren in the block. We then pull + // back based on if there a matching ones in the url + // ([here](/url/(test)) + // The parens have to be balanced + var m = text.match( /^\s*\([ \t]*([^"']*)(?:[ \t]+(["'])(.*?)\2)?[ \t]*\)/ ); + if ( m ) { + var url = m[1]; + consumed += m[0].length; + + if ( url && url[0] == "<" && url[url.length-1] == ">" ) + url = url.substring( 1, url.length - 1 ); + + // If there is a title we don't have to worry about parens in the url + if ( !m[3] ) { + var open_parens = 1; // One open that isn't in the capture + for ( var len = 0; len < url.length; len++ ) { + switch ( url[len] ) { + case "(": + open_parens++; + break; + case ")": + if ( --open_parens == 0) { + consumed -= url.length - len; + url = url.substring(0, len); + } + break; + } + } + } + + // Process escapes only + url = this.dialect.inline.__call__.call( this, url, /\\/ )[0]; + + attrs = { href: url || "" }; + if ( m[3] !== undefined) + attrs.title = m[3]; + + link = [ "link", attrs ].concat( children ); + return [ consumed, link ]; + } + + // [Alt text][id] + // [Alt text] [id] + m = text.match( /^\s*\[(.*?)\]/ ); + + if ( m ) { + + consumed += m[ 0 ].length; + + // [links][] uses links as its reference + attrs = { ref: ( m[ 1 ] || String(children) ).toLowerCase(), original: orig.substr( 0, consumed ) }; + + link = [ "link_ref", attrs ].concat( children ); + + // We can't check if the reference is known here as it likely wont be + // found till after. Check it in md tree->hmtl tree conversion. + // Store the original so that conversion can revert if the ref isn't found. + return [ consumed, link ]; + } + + // [id] + // Only if id is plain (no formatting.) + if ( children.length == 1 && typeof children[0] == "string" ) { + + attrs = { ref: children[0].toLowerCase(), original: orig.substr( 0, consumed ) }; + link = [ "link_ref", attrs, children[0] ]; + return [ consumed, link ]; + } + + // Just consume the "[" + return [ 1, "[" ]; + }, + + + "<": function autoLink( text ) { + var m; + + if ( ( m = text.match( /^<(?:((https?|ftp|mailto):[^>]+)|(.*?@.*?\.[a-zA-Z]+))>/ ) ) != null ) { + if ( m[3] ) { + return [ m[0].length, [ "link", { href: "mailto:" + m[3] }, m[3] ] ]; + + } + else if ( m[2] == "mailto" ) { + return [ m[0].length, [ "link", { href: m[1] }, m[1].substr("mailto:".length ) ] ]; + } + else + return [ m[0].length, [ "link", { href: m[1] }, m[1] ] ]; + } + + return [ 1, "<" ]; + }, + + "`": function inlineCode( text ) { + // Inline code block. as many backticks as you like to start it + // Always skip over the opening ticks. + var m = text.match( /(`+)(([\s\S]*?)\1)/ ); + + if ( m && m[2] ) + return [ m[1].length + m[2].length, [ "inlinecode", m[3] ] ]; + else { + // TODO: No matching end code found - warn! + return [ 1, "`" ]; + } + }, + + " \n": function lineBreak( text ) { + return [ 3, [ "linebreak" ] ]; + } + +}; + +// Meta Helper/generator method for em and strong handling +function strong_em( tag, md ) { + + var state_slot = tag + "_state", + other_slot = tag == "strong" ? "em_state" : "strong_state"; + + function CloseTag(len) { + this.len_after = len; + this.name = "close_" + md; + } + + return function ( text, orig_match ) { + + if ( this[state_slot][0] == md ) { + // Most recent em is of this type + //D:this.debug("closing", md); + this[state_slot].shift(); + + // "Consume" everything to go back to the recrusion in the else-block below + return[ text.length, new CloseTag(text.length-md.length) ]; + } + else { + // Store a clone of the em/strong states + var other = this[other_slot].slice(), + state = this[state_slot].slice(); + + this[state_slot].unshift(md); + + //D:this.debug_indent += " "; + + // Recurse + var res = this.processInline( text.substr( md.length ) ); + //D:this.debug_indent = this.debug_indent.substr(2); + + var last = res[res.length - 1]; + + //D:this.debug("processInline from", tag + ": ", uneval( res ) ); + + var check = this[state_slot].shift(); + if ( last instanceof CloseTag ) { + res.pop(); + // We matched! Huzzah. + var consumed = text.length - last.len_after; + return [ consumed, [ tag ].concat(res) ]; + } + else { + // Restore the state of the other kind. We might have mistakenly closed it. + this[other_slot] = other; + this[state_slot] = state; + + // We can't reuse the processed result as it could have wrong parsing contexts in it. + return [ md.length, md ]; + } + } + }; // End returned function +} + +Markdown.dialects.Gruber.inline["**"] = strong_em("strong", "**"); +Markdown.dialects.Gruber.inline["__"] = strong_em("strong", "__"); +Markdown.dialects.Gruber.inline["*"] = strong_em("em", "*"); +Markdown.dialects.Gruber.inline["_"] = strong_em("em", "_"); + + +// Build default order from insertion order. +Markdown.buildBlockOrder = function(d) { + var ord = []; + for ( var i in d ) { + if ( i == "__order__" || i == "__call__" ) continue; + ord.push( i ); + } + d.__order__ = ord; +}; + +// Build patterns for inline matcher +Markdown.buildInlinePatterns = function(d) { + var patterns = []; + + for ( var i in d ) { + // __foo__ is reserved and not a pattern + if ( i.match( /^__.*__$/) ) continue; + var l = i.replace( /([\\.*+?|()\[\]{}])/g, "\\$1" ) + .replace( /\n/, "\\n" ); + patterns.push( i.length == 1 ? l : "(?:" + l + ")" ); + } + + patterns = patterns.join("|"); + d.__patterns__ = patterns; + //print("patterns:", uneval( patterns ) ); + + var fn = d.__call__; + d.__call__ = function(text, pattern) { + if ( pattern != undefined ) { + return fn.call(this, text, pattern); + } + else + { + return fn.call(this, text, patterns); + } + }; +}; + +Markdown.DialectHelpers = {}; +Markdown.DialectHelpers.inline_until_char = function( text, want ) { + var consumed = 0, + nodes = []; + + while ( true ) { + if ( text.charAt( consumed ) == want ) { + // Found the character we were looking for + consumed++; + return [ consumed, nodes ]; + } + + if ( consumed >= text.length ) { + // No closing char found. Abort. + return null; + } + + var res = this.dialect.inline.__oneElement__.call(this, text.substr( consumed ) ); + consumed += res[ 0 ]; + // Add any returned nodes. + nodes.push.apply( nodes, res.slice( 1 ) ); + } +} + +// Helper function to make sub-classing a dialect easier +Markdown.subclassDialect = function( d ) { + function Block() {} + Block.prototype = d.block; + function Inline() {} + Inline.prototype = d.inline; + + return { block: new Block(), inline: new Inline() }; +}; + +Markdown.buildBlockOrder ( Markdown.dialects.Gruber.block ); +Markdown.buildInlinePatterns( Markdown.dialects.Gruber.inline ); + +Markdown.dialects.Maruku = Markdown.subclassDialect( Markdown.dialects.Gruber ); + +Markdown.dialects.Maruku.processMetaHash = function processMetaHash( meta_string ) { + var meta = split_meta_hash( meta_string ), + attr = {}; + + for ( var i = 0; i < meta.length; ++i ) { + // id: #foo + if ( /^#/.test( meta[ i ] ) ) { + attr.id = meta[ i ].substring( 1 ); + } + // class: .foo + else if ( /^\./.test( meta[ i ] ) ) { + // if class already exists, append the new one + if ( attr["class"] ) { + attr["class"] = attr["class"] + meta[ i ].replace( /./, " " ); + } + else { + attr["class"] = meta[ i ].substring( 1 ); + } + } + // attribute: foo=bar + else if ( /\=/.test( meta[ i ] ) ) { + var s = meta[ i ].split( /\=/ ); + attr[ s[ 0 ] ] = s[ 1 ]; + } + } + + return attr; +} + +function split_meta_hash( meta_string ) { + var meta = meta_string.split( "" ), + parts = [ "" ], + in_quotes = false; + + while ( meta.length ) { + var letter = meta.shift(); + switch ( letter ) { + case " " : + // if we're in a quoted section, keep it + if ( in_quotes ) { + parts[ parts.length - 1 ] += letter; + } + // otherwise make a new part + else { + parts.push( "" ); + } + break; + case "'" : + case '"' : + // reverse the quotes and move straight on + in_quotes = !in_quotes; + break; + case "\\" : + // shift off the next letter to be used straight away. + // it was escaped so we'll keep it whatever it is + letter = meta.shift(); + default : + parts[ parts.length - 1 ] += letter; + break; + } + } + + return parts; +} + +Markdown.dialects.Maruku.block.document_meta = function document_meta( block, next ) { + // we're only interested in the first block + if ( block.lineNumber > 1 ) return undefined; + + // document_meta blocks consist of one or more lines of `Key: Value\n` + if ( ! block.match( /^(?:\w+:.*\n)*\w+:.*$/ ) ) return undefined; + + // make an attribute node if it doesn't exist + if ( !extract_attr( this.tree ) ) { + this.tree.splice( 1, 0, {} ); + } + + var pairs = block.split( /\n/ ); + for ( p in pairs ) { + var m = pairs[ p ].match( /(\w+):\s*(.*)$/ ), + key = m[ 1 ].toLowerCase(), + value = m[ 2 ]; + + this.tree[ 1 ][ key ] = value; + } + + // document_meta produces no content! + return []; +}; + +Markdown.dialects.Maruku.block.block_meta = function block_meta( block, next ) { + // check if the last line of the block is an meta hash + var m = block.match( /(^|\n) {0,3}\{:\s*((?:\\\}|[^\}])*)\s*\}$/ ); + if ( !m ) return undefined; + + // process the meta hash + var attr = this.dialect.processMetaHash( m[ 2 ] ); + + var hash; + + // if we matched ^ then we need to apply meta to the previous block + if ( m[ 1 ] === "" ) { + var node = this.tree[ this.tree.length - 1 ]; + hash = extract_attr( node ); + + // if the node is a string (rather than JsonML), bail + if ( typeof node === "string" ) return undefined; + + // create the attribute hash if it doesn't exist + if ( !hash ) { + hash = {}; + node.splice( 1, 0, hash ); + } + + // add the attributes in + for ( a in attr ) { + hash[ a ] = attr[ a ]; + } + + // return nothing so the meta hash is removed + return []; + } + + // pull the meta hash off the block and process what's left + var b = block.replace( /\n.*$/, "" ), + result = this.processBlock( b, [] ); + + // get or make the attributes hash + hash = extract_attr( result[ 0 ] ); + if ( !hash ) { + hash = {}; + result[ 0 ].splice( 1, 0, hash ); + } + + // attach the attributes to the block + for ( a in attr ) { + hash[ a ] = attr[ a ]; + } + + return result; +}; + +Markdown.dialects.Maruku.block.definition_list = function definition_list( block, next ) { + // one or more terms followed by one or more definitions, in a single block + var tight = /^((?:[^\s:].*\n)+):\s+([\s\S]+)$/, + list = [ "dl" ], + i, m; + + // see if we're dealing with a tight or loose block + if ( ( m = block.match( tight ) ) ) { + // pull subsequent tight DL blocks out of `next` + var blocks = [ block ]; + while ( next.length && tight.exec( next[ 0 ] ) ) { + blocks.push( next.shift() ); + } + + for ( var b = 0; b < blocks.length; ++b ) { + var m = blocks[ b ].match( tight ), + terms = m[ 1 ].replace( /\n$/, "" ).split( /\n/ ), + defns = m[ 2 ].split( /\n:\s+/ ); + + // print( uneval( m ) ); + + for ( i = 0; i < terms.length; ++i ) { + list.push( [ "dt", terms[ i ] ] ); + } + + for ( i = 0; i < defns.length; ++i ) { + // run inline processing over the definition + list.push( [ "dd" ].concat( this.processInline( defns[ i ].replace( /(\n)\s+/, "$1" ) ) ) ); + } + } + } + else { + return undefined; + } + + return [ list ]; +}; + +// splits on unescaped instances of @ch. If @ch is not a character the result +// can be unpredictable + +Markdown.dialects.Maruku.block.table = function table (block, next) { + + var _split_on_unescaped = function(s, ch) { + ch = ch || '\\s'; + if (ch.match(/^[\\|\[\]{}?*.+^$]$/)) { ch = '\\' + ch; } + var res = [ ], + r = new RegExp('^((?:\\\\.|[^\\\\' + ch + '])*)' + ch + '(.*)'), + m; + while(m = s.match(r)) { + res.push(m[1]); + s = m[2]; + } + res.push(s); + return res; + } + + var leading_pipe = /^ {0,3}\|(.+)\n {0,3}\|\s*([\-:]+[\-| :]*)\n((?:\s*\|.*(?:\n|$))*)(?=\n|$)/, + // find at least an unescaped pipe in each line + no_leading_pipe = /^ {0,3}(\S(?:\\.|[^\\|])*\|.*)\n {0,3}([\-:]+\s*\|[\-| :]*)\n((?:(?:\\.|[^\\|])*\|.*(?:\n|$))*)(?=\n|$)/, + i, m; + if (m = block.match(leading_pipe)) { + // remove leading pipes in contents + // (header and horizontal rule already have the leading pipe left out) + m[3] = m[3].replace(/^\s*\|/gm, ''); + } else if (! ( m = block.match(no_leading_pipe))) { + return undefined; + } + + var table = [ "table", [ "thead", [ "tr" ] ], [ "tbody" ] ]; + + // remove trailing pipes, then split on pipes + // (no escaped pipes are allowed in horizontal rule) + m[2] = m[2].replace(/\|\s*$/, '').split('|'); + + // process alignment + var html_attrs = [ ]; + forEach (m[2], function (s) { + if (s.match(/^\s*-+:\s*$/)) html_attrs.push({align: "right"}); + else if (s.match(/^\s*:-+\s*$/)) html_attrs.push({align: "left"}); + else if (s.match(/^\s*:-+:\s*$/)) html_attrs.push({align: "center"}); + else html_attrs.push({}); + }); + + // now for the header, avoid escaped pipes + m[1] = _split_on_unescaped(m[1].replace(/\|\s*$/, ''), '|'); + for (i = 0; i < m[1].length; i++) { + table[1][1].push(['th', html_attrs[i] || {}].concat( + this.processInline(m[1][i].trim()))); + } + + // now for body contents + forEach (m[3].replace(/\|\s*$/mg, '').split('\n'), function (row) { + var html_row = ['tr']; + row = _split_on_unescaped(row, '|'); + for (i = 0; i < row.length; i++) { + html_row.push(['td', html_attrs[i] || {}].concat(this.processInline(row[i].trim()))); + } + table[2].push(html_row); + }, this); + + return [table]; +} + +Markdown.dialects.Maruku.inline[ "{:" ] = function inline_meta( text, matches, out ) { + if ( !out.length ) { + return [ 2, "{:" ]; + } + + // get the preceeding element + var before = out[ out.length - 1 ]; + + if ( typeof before === "string" ) { + return [ 2, "{:" ]; + } + + // match a meta hash + var m = text.match( /^\{:\s*((?:\\\}|[^\}])*)\s*\}/ ); + + // no match, false alarm + if ( !m ) { + return [ 2, "{:" ]; + } + + // attach the attributes to the preceeding element + var meta = this.dialect.processMetaHash( m[ 1 ] ), + attr = extract_attr( before ); + + if ( !attr ) { + attr = {}; + before.splice( 1, 0, attr ); + } + + for ( var k in meta ) { + attr[ k ] = meta[ k ]; + } + + // cut out the string and replace it with nothing + return [ m[ 0 ].length, "" ]; +}; + +Markdown.dialects.Maruku.inline.__escape__ = /^\\[\\`\*_{}\[\]()#\+.!\-|:]/; + +Markdown.buildBlockOrder ( Markdown.dialects.Maruku.block ); +Markdown.buildInlinePatterns( Markdown.dialects.Maruku.inline ); + +var isArray = Array.isArray || function(obj) { + return Object.prototype.toString.call(obj) == "[object Array]"; +}; + +var forEach; +// Don't mess with Array.prototype. Its not friendly +if ( Array.prototype.forEach ) { + forEach = function( arr, cb, thisp ) { + return arr.forEach( cb, thisp ); + }; +} +else { + forEach = function(arr, cb, thisp) { + for (var i = 0; i < arr.length; i++) { + cb.call(thisp || arr, arr[i], i, arr); + } + } +} + +var isEmpty = function( obj ) { + for ( var key in obj ) { + if ( hasOwnProperty.call( obj, key ) ) { + return false; + } + } + + return true; +} + +function extract_attr( jsonml ) { + return isArray(jsonml) + && jsonml.length > 1 + && typeof jsonml[ 1 ] === "object" + && !( isArray(jsonml[ 1 ]) ) + ? jsonml[ 1 ] + : undefined; +} + + + +/** + * renderJsonML( jsonml[, options] ) -> String + * - jsonml (Array): JsonML array to render to XML + * - options (Object): options + * + * Converts the given JsonML into well-formed XML. + * + * The options currently understood are: + * + * - root (Boolean): wether or not the root node should be included in the + * output, or just its children. The default `false` is to not include the + * root itself. + */ +expose.renderJsonML = function( jsonml, options ) { + options = options || {}; + // include the root element in the rendered output? + options.root = options.root || false; + + var content = []; + + if ( options.root ) { + content.push( render_tree( jsonml ) ); + } + else { + jsonml.shift(); // get rid of the tag + if ( jsonml.length && typeof jsonml[ 0 ] === "object" && !( jsonml[ 0 ] instanceof Array ) ) { + jsonml.shift(); // get rid of the attributes + } + + while ( jsonml.length ) { + content.push( render_tree( jsonml.shift() ) ); + } + } + + return content.join( "\n\n" ); +}; + +function escapeHTML( text ) { + return text.replace( /&/g, "&" ) + .replace( //g, ">" ) + .replace( /"/g, """ ) + .replace( /'/g, "'" ); +} + +function render_tree( jsonml ) { + // basic case + if ( typeof jsonml === "string" ) { + return escapeHTML( jsonml ); + } + + var tag = jsonml.shift(), + attributes = {}, + content = []; + + if ( jsonml.length && typeof jsonml[ 0 ] === "object" && !( jsonml[ 0 ] instanceof Array ) ) { + attributes = jsonml.shift(); + } + + while ( jsonml.length ) { + content.push( render_tree( jsonml.shift() ) ); + } + + var tag_attrs = ""; + for ( var a in attributes ) { + tag_attrs += " " + a + '="' + escapeHTML( attributes[ a ] ) + '"'; + } + + // be careful about adding whitespace here for inline elements + if ( tag == "img" || tag == "br" || tag == "hr" ) { + return "<"+ tag + tag_attrs + "/>"; + } + else { + return "<"+ tag + tag_attrs + ">" + content.join( "" ) + ""; + } +} + +function convert_tree_to_html( tree, references, options ) { + var i; + options = options || {}; + + // shallow clone + var jsonml = tree.slice( 0 ); + + if ( typeof options.preprocessTreeNode === "function" ) { + jsonml = options.preprocessTreeNode(jsonml, references); + } + + // Clone attributes if they exist + var attrs = extract_attr( jsonml ); + if ( attrs ) { + jsonml[ 1 ] = {}; + for ( i in attrs ) { + jsonml[ 1 ][ i ] = attrs[ i ]; + } + attrs = jsonml[ 1 ]; + } + + // basic case + if ( typeof jsonml === "string" ) { + return jsonml; + } + + // convert this node + switch ( jsonml[ 0 ] ) { + case "header": + jsonml[ 0 ] = "h" + jsonml[ 1 ].level; + delete jsonml[ 1 ].level; + break; + case "bulletlist": + jsonml[ 0 ] = "ul"; + break; + case "numberlist": + jsonml[ 0 ] = "ol"; + break; + case "listitem": + jsonml[ 0 ] = "li"; + break; + case "para": + jsonml[ 0 ] = "p"; + break; + case "markdown": + jsonml[ 0 ] = "html"; + if ( attrs ) delete attrs.references; + break; + case "code_block": + jsonml[ 0 ] = "pre"; + i = attrs ? 2 : 1; + var code = [ "code" ]; + code.push.apply( code, jsonml.splice( i, jsonml.length - i ) ); + jsonml[ i ] = code; + break; + case "inlinecode": + jsonml[ 0 ] = "code"; + break; + case "img": + jsonml[ 1 ].src = jsonml[ 1 ].href; + delete jsonml[ 1 ].href; + break; + case "linebreak": + jsonml[ 0 ] = "br"; + break; + case "link": + jsonml[ 0 ] = "a"; + break; + case "link_ref": + jsonml[ 0 ] = "a"; + + // grab this ref and clean up the attribute node + var ref = references[ attrs.ref ]; + + // if the reference exists, make the link + if ( ref ) { + delete attrs.ref; + + // add in the href and title, if present + attrs.href = ref.href; + if ( ref.title ) { + attrs.title = ref.title; + } + + // get rid of the unneeded original text + delete attrs.original; + } + // the reference doesn't exist, so revert to plain text + else { + return attrs.original; + } + break; + case "img_ref": + jsonml[ 0 ] = "img"; + + // grab this ref and clean up the attribute node + var ref = references[ attrs.ref ]; + + // if the reference exists, make the link + if ( ref ) { + delete attrs.ref; + + // add in the href and title, if present + attrs.src = ref.href; + if ( ref.title ) { + attrs.title = ref.title; + } + + // get rid of the unneeded original text + delete attrs.original; + } + // the reference doesn't exist, so revert to plain text + else { + return attrs.original; + } + break; + } + + // convert all the children + i = 1; + + // deal with the attribute node, if it exists + if ( attrs ) { + // if there are keys, skip over it + for ( var key in jsonml[ 1 ] ) { + i = 2; + break; + } + // if there aren't, remove it + if ( i === 1 ) { + jsonml.splice( i, 1 ); + } + } + + for ( ; i < jsonml.length; ++i ) { + jsonml[ i ] = convert_tree_to_html( jsonml[ i ], references, options ); + } + + return jsonml; +} + + +// merges adjacent text nodes into a single node +function merge_text_nodes( jsonml ) { + // skip the tag name and attribute hash + var i = extract_attr( jsonml ) ? 2 : 1; + + while ( i < jsonml.length ) { + // if it's a string check the next item too + if ( typeof jsonml[ i ] === "string" ) { + if ( i + 1 < jsonml.length && typeof jsonml[ i + 1 ] === "string" ) { + // merge the second string into the first and remove it + jsonml[ i ] += jsonml.splice( i + 1, 1 )[ 0 ]; + } + else { + ++i; + } + } + // if it's not a string recurse + else { + merge_text_nodes( jsonml[ i ] ); + ++i; + } + } +} + +} )( (function() { + if ( typeof exports === "undefined" ) { + window.markdown = {}; + return window.markdown; + } + else { + return exports; + } +} )() ); diff --git a/shared/html/libs/winjs/License.txt b/shared/html/libs/winjs/License.txt new file mode 100644 index 0000000..baf9dc1 --- /dev/null +++ b/shared/html/libs/winjs/License.txt @@ -0,0 +1,13 @@ +WinJS + +Copyright (c) Microsoft Corporation + +All rights reserved. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/shared/html/settings/appinstaller/guide.html b/shared/html/settings/appinstaller/guide.html index ce81ef5..99d6974 100644 --- a/shared/html/settings/appinstaller/guide.html +++ b/shared/html/settings/appinstaller/guide.html @@ -31,21 +31,23 @@ -
    -

    -

    +
    +
    +

    +

    +
    +
    - \ No newline at end of file diff --git a/shared/html/settings/appinstaller/init.js b/shared/html/settings/appinstaller/init.js index bec1bb4..0a3ae63 100644 --- a/shared/html/settings/appinstaller/init.js +++ b/shared/html/settings/appinstaller/init.js @@ -5,8 +5,12 @@ var page = document.querySelector("#settingpage"); var guide = page.querySelector(".page.guide"); var slide = guide.querySelector("aside"); + setTimeout(function() { + var barcolor = visual["BackgroundColor"]; + slide.style.backgroundColor = barcolor; + slide.style.color = Color.getSuitableForegroundTextColor(Color.parse(barcolor), [Color.Const.white, Color.Const.black]).stringify(); + }, 50); var content = guide.querySelector(".main"); - var shead = slide.querySelector("header"); var list = slide.querySelector("ul"); list.innerHTML = ""; var items = pages; @@ -19,12 +23,17 @@ li.setAttribute("data-page", item.page); li.innerHTML = item.title; eventutil.addEvent(li, "click", function() { + content.style.display = "none"; for (var j = 0; j < list.children.length; j++) { var child = list.children[j]; if (child.classList.contains("selected")) child.classList.remove("selected"); } content.src = this.getAttribute("data-page"); + setTimeout(function() { + content.style.display = ""; + Windows.UI.Animation.runAsync(content, Windows.UI.Animation.Keyframes.SlideInFromBottom); + }, 0); this.classList.add("selected"); }); list.appendChild(li); diff --git a/shared/html/settings/appinstaller/initsame.js b/shared/html/settings/appinstaller/initsame.js index 5186485..2452804 100644 --- a/shared/html/settings/appinstaller/initsame.js +++ b/shared/html/settings/appinstaller/initsame.js @@ -3,6 +3,19 @@ function ready(e) { Windows.UI.DPI.mode = 1 + var pagesection = document.querySelector(".pagesection"); + if (pagesection) { + var backcolor = slideback; + setTimeout(function() { + var h2style = document.getElementById("h2-style"); + if (!h2style) { + h2style = document.createElement("style"); + h2style.id = "h2-style"; + } + h2style.innerHTML = ".main h2 { color: " + Color.getSuitableForegroundTextColor(Color.parse("#F3F3F3"), [Color.parse(backcolor), Color.Const.black]).RGBA.stringify() + " }"; + document.head.appendChild(h2style); + }, 0); + } } OnLoad.add(ready); })(this); \ No newline at end of file diff --git a/shared/html/settings/initsame.js b/shared/html/settings/initsame.js index 844747e..053b30b 100644 --- a/shared/html/settings/initsame.js +++ b/shared/html/settings/initsame.js @@ -17,8 +17,19 @@ } try { slide.style.backgroundColor = Bridge.UI.themeColor; - slide.style.color = Color.getSuitableForegroundTextColor(Color.parse(slide.style.backgroundColor), [Color.Const.white, Color.Const.black]); - } catch (e) {} + slide.style.color = Color.getSuitableForegroundTextColor(Color.parse(Bridge.UI.themeColor), [Color.Const.white, Color.Const.black]).RGBA.stringify(); + setTimeout(function() { + var h2style = document.getElementById("h2-style"); + if (!h2style) { + h2style = document.createElement("style"); + h2style.id = "h2-style"; + } + h2style.innerHTML = ".main h2 { color: " + Color.getSuitableForegroundTextColor(Color.parse("#F3F3F3"), [Color.parse(Bridge.UI.themeColor), Color.Const.black]).RGBA.stringify() + " }"; + document.head.appendChild(h2style); + }, 0); + } catch (e) { + console.error(e); + } setTimeout(function() { slide.style.transition = "all 0.5s cubic-bezier(0.1, 0.9, 0.2, 1)"; }, 0); diff --git a/shared/html/settings/update.html b/shared/html/settings/update.html index e69de29..765cb1f 100644 --- a/shared/html/settings/update.html +++ b/shared/html/settings/update.html @@ -0,0 +1,385 @@ + + + + + App Installer Settings + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    +

    鍦ㄨ繖閲岋紝妫鏌ヤ竴涓嬪簲鐢ㄧ殑鏇存柊銆

    +

    + +
    +
    +
    + 123姝e湪妫鏌ユ洿鏂...
    + + 鏌ョ湅鏂囨。 +
    +
    +
    + + +
    + + + \ No newline at end of file diff --git a/shared/version b/shared/version new file mode 100644 index 0000000..726017f --- /dev/null +++ b/shared/version @@ -0,0 +1 @@ +0.1.0.0 \ No newline at end of file