From ddb7c3138723fb6a30d9ebe14cf9f300314e0ebd Mon Sep 17 00:00:00 2001 From: "daemon.devin" Date: Tue, 5 Dec 2017 10:35:01 -0600 Subject: [PATCH] Updated to v2.1 and Added x86_64 Dual Hybrid Mode Fixed a bunch of bugs in the code. Added a "Dual Mode" setting for x86_64 hybrid launchers. [Activate]DualMode. See the read me file for more information. --- App/AppInfo/appinfo.ini | 12 +- PortableAppsCompiler.exe | Bin 266543 -> 297537 bytes README.md | 40 +- etc/help.html | 1 + etc/source/Debug.nsh | 2 +- etc/source/Languages.nsh | 53 +- etc/source/PortableAppsCompiler.nsi | 351 ++---- etc/source/PortableAppsCompilerDefines.nsh | 51 +- etc/source/PortableAppsCompilerMacros.nsh | 24 + etc/source/Segments.nsh | 2 +- etc/source/Segments/DirectX.nsh | 125 ++ etc/source/Version.nsh | 4 +- ...CompilerWizard.nsi => WrapperCompiler.nsi} | 1027 +++++++++++------ ...WizardForm.ini => WrapperCompilerForm.ini} | 2 +- etc/source/daemon.devin.p12 | Bin 2573 -> 0 bytes 15 files changed, 1012 insertions(+), 682 deletions(-) create mode 100644 etc/help.html create mode 100644 etc/source/Segments/DirectX.nsh rename etc/source/{CompilerWizard.nsi => WrapperCompiler.nsi} (50%) rename etc/source/{CompilerWizardForm.ini => WrapperCompilerForm.ini} (84%) delete mode 100644 etc/source/daemon.devin.p12 diff --git a/App/AppInfo/appinfo.ini b/App/AppInfo/appinfo.ini index e72b9ba..d4ad982 100755 --- a/App/AppInfo/appinfo.ini +++ b/App/AppInfo/appinfo.ini @@ -4,15 +4,15 @@ Version=3.5 [Details] Name=PortableApps Compiler -AppID=PortableAppsComiler -Publisher=demon.devin -Homepage=https://github.com/demondevin/pac-man +AppID=PortableAppsCompiler +Publisher=daemon.devin +Homepage=https://github.com/daemondevin/pac-man Category=Development Description=A better alternative to the PortableApps.com Launcher—PortableApps Compiler & Management Language=English [Team] -Developer=demon.devin +Developer=daemon.devin [License] Shareable=true @@ -21,8 +21,8 @@ Freeware=true CommercialUse=true [Version] -PackageVersion=2.0.1.0 -DisplayVersion=2.0.1 Dev +PackageVersion=2.1.0.0 +DisplayVersion=2.1.0 Dev [Control] Icons=1 diff --git a/PortableAppsCompiler.exe b/PortableAppsCompiler.exe index 80b478194803b7653c51eab405cc189789bae331..88d5fcef23c9ff2574c2801a6231a4c0eb3d0e59 100644 GIT binary patch delta 92750 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
-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 _ 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 delta 61512 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 diff --git a/README.md b/README.md index ab5840c..9590d3c 100644 --- a/README.md +++ b/README.md @@ -24,17 +24,16 @@ With all that said, enjoy the fresh ideas which are currently being worked out. > | 7-ZipPortable.ini (User Config File) > | > +---app -> | +---AppInfo (Kept for Compatibility with PA.c Menu) +> | +---AppInfo (Kept for Compatibility with PA.c Menu) > | | AppIcon.ico (Needed with PA.c Menu) > | | AppIcon_128.png ' ' ' ' ' ' > | | AppIcon_16.png ' ' ' ' ' ' > | | AppIcon_32.png ' ' ' ' ' ' > | | AppInfo.ini ' ' ' ' ' ' -> | | CompilerInstaller.ini (Formally Installer.ini) -> | | CompilerWrapper.ini (Formally Launcher.ini) +> | | Installer.ini > | | EULA.txt -> | | ExtendedInstaller.nsh (Formally InstallerCustom.nsh) -> | | ExtendedWrapper.nsh (Formally Custom.nsh) +> | | ExtendWrapper.nsh (Formally Custom.nsh) +> | | Wrapper.ini (Formally Launcher.ini) > | | > | \---DefaultSettings (Formally DefaultData) > | | DEFAULT 7-ZIP SETTINGS HERE @@ -84,7 +83,7 @@ With all that said, enjoy the fresh ideas which are currently being worked out. ##### PAF to PAC Conversion - The compiler can now handle converting PAF PortableApps to the above folder layout. Everything is handled automatically so you do not need to manually set the files in the correct place. I also added support for converting FukenGruven's old PAFs as well. -- Do not expect the PA.c Installer to work out of the box for this new folder structure. Since I've renamed and moved around the applicable configuration files, PA.c Installer won't be able to locate the right files anymore and most likely won't be able to pack your portable anymore. However, I haven't tested this out yet. +- Do not expect the PA.c Installer to work out of the box for this new folder structure. Since I've renamed and moved around the applicable configuration files, PA.c Installer won't be able to locate the right files any more and most likely won't be able to pack your portable. However, I haven't tested this out yet. ## Features ---------- @@ -92,7 +91,7 @@ With all that said, enjoy the fresh ideas which are currently being worked out. The following is a list of features that is currently available with PortableApps Compiler. Everything listed here has been tested and is in working order. - Everything that is available with [PortableApps.com Launcher](https://portableapps.com/apps/development/portableapps.com_launcher) is also available with PortableApps Compiler. -- Manipulating Windows Services. +- Minipulating Windows Services. - Dealing with Windows Tasks. - Registering DLL files. - Registry redirection support. @@ -107,7 +106,7 @@ The following is a list of features that is currently available with PortableApp __Environment Variables__ -- `%PROGRAMDATA%` has now been added and kept `%ALLUSERSAPPDATA%` for backwards compatibility. Both can be used anywhere you can use an environment variable. +- `%PROGRAMDATA%` has now been added and kept `%ALLUSERSAPPDATA%` for backwards compatibility. Both can be used anywhere you can use an evironment variable. - `%PAC:CommonFiles%` may now be used within the _Launcher.ini_ configuration file. This environment variable will point to `..\PortableApps\CommonFiles` if applicable. Can be used anywhere you can use an environment variable. > Example: > ```INI @@ -120,6 +119,7 @@ Added new keys to the `[Activate]` section. They are as follows (a short descrip > Note: You should only use the following keys if you need them, otherwise they should be omitted entirely. ```INI [Activate] +DualMode=7-ZIP Registry=true RegRedirection=true RegCopyKeys=true @@ -138,12 +138,14 @@ FileCleanup=true DirectoryCleanup=true ``` +* __DualMode:__ For a x86_64 hybrid wrapper. If you want to run 32-bit/64-bit side-by-side in _"Dual Mode"_. Just specify a short name (usually the AppID in all caps) in which you may use inside the Wrapper.ini as an environment variable. (e.g. `%7-ZIP%`) + * __Registry:__ Add support for manipulating the Windows Registry. * __RegRedirection:__ Enable support for enabling/disabling registry redirection. * __RegCopyKeys:__ Enable support for copying registry keys to a special hive (`HKCU\Software\PortableApps.com`) before launching the application and restoring the keys after the application exits. See `RegistryCopyKeys.nsh` in the Segments directory. -> To use this feature add the section `[RegistryCopyKeys]` to the `Launcher.ini` file. Each entry should be the path to the registry key to be copied back and forth. Example usage: +> To use this feature add the section `[RegistryCopyKeys]` to the `Wrapper.ini` file. Each entry should be the path to the registry key to be copied back and forth. Example usage: > ```INI > [RegistryCopyKeys] > 1=HKCU\Software\MyProgram\ExtraCareNeededKey @@ -154,10 +156,10 @@ DirectoryCleanup=true * __ForceRedirection:__ Checks using the variable `$Bit` to disable/enable file system redirection. -* __ExecAsUser:__ For applications which need to run as normal user but need the launcher to have elevated privileges. [Read this](http://mdb-blog.blogspot.com/2013/01/nsis-lunch-program-as-user-from-uac.html) for more information on this concept. +* __ExecAsUser:__ For applications which need to run as normal user but need the wrapper to have elevated privileges. [Read this](http://mdb-blog.blogspot.com/2013/01/nsis-lunch-program-as-user-from-uac.html) for more information on this concept. * __Services:__ Add support for handling Windows Services. -> To use this feature add the section `[Service1]` (numerical ordering) to the `Launcher.ini` file. Each entry supports six keys which are as follows: +> To use this feature add the section `[Service1]` (numerical ordering) to the `Wrapper.ini` file. Each entry supports six keys which are as follows: | __Key__ | __Value__ | |:-------- |:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | @@ -188,7 +190,7 @@ DirectoryCleanup=true > ``` * __RegDLLs:__ Add support for handling library (DLLs) file registration. -> To use this feature add the section `[RegisterDLL1]` (numerical ordering) to the `Launcher.ini` file. Each entry supports two keys; _ProgID_ (The DLL's ProgID) and _File_ (The path to DLL. Supports environment variables). Example usage: +> To use this feature add the section `[RegisterDLL1]` (numerical ordering) to the `Wrapper.ini` file. Each entry supports two keys; _ProgID_ (The DLL's ProgID) and _File_ (The path to DLL. Supports environment variables). Example usage: > ```INI > [RegisterDLL1] > ProgID=MyAppControlPanel @@ -200,7 +202,7 @@ DirectoryCleanup=true > ``` * __Tasks:__ Enable the TaskCleanup segment for removing any Windows Tasks that were added during runtime. -> To use this feature add the section `[TaskCleanup]` to the `Launcher.ini` file. Each entry should be the Windows Task name to be removed. Example usage: +> To use this feature add the section `[TaskCleanup]` to the `Wrapper.ini` file. Each entry should be the Windows Task name to be removed. Example usage: > ```INI > [TaskCleanup] > 1=MyAppTask1 @@ -215,7 +217,7 @@ DirectoryCleanup=true * __Ghostscript:__ Add Ghostscript support. -* __FontsFolder:__ Allows the portable application to support fonts within the directory `..\Data\Fonts`. Any fonts added in this folder will be added and are available for usage during runtime. Be aware, the more fonts to process the longer it will take for the launcher to load and unload these fonts. +* __FontsFolder:__ Allows the portable application to support fonts within the directory `..\Data\Fonts`. Any fonts added in this folder will be added and are available for usage during runtime. Be aware, the more fonts to process the longer it will take for the wrapper to load and unload these fonts. > Supported Fonts: > - .fon > - .fnt @@ -227,15 +229,15 @@ DirectoryCleanup=true > - .pfb > - .pfm -* __FileCleanup:__ Enable support for adding the section `[FilesCleanup]` in `Launcher.ini`. See `FilesCleanup.nsh` in the Segments directory. -> To use this feature add the section `[FilesCleanup]` to the `Launcher.ini` file. Each entry should be the path to the file that needs deleting. Supports environment variables. Example usage: +* __FileCleanup:__ Enable support for adding the section `[FilesCleanup]` in `Wrapper.ini`. See `FilesCleanup.nsh` in the Segments directory. +> To use this feature add the section `[FilesCleanup]` to the `Wrapper.ini` file. Each entry should be the path to the file that needs deleting. Supports environment variables. Example usage: > ```INI > [FilesCleanup] > 1=%PAC:DataDir%\uselessUpgradeFile.xml > 2=%APPDATA%\MyProgram\purposelessCfg.ini > ``` -* __DirectoryCleanup:__ Enable support for the sections `[DirectoriesCleanupIfEmpty]` and `[DirectoriesCleanupForce]` in `Launcher.ini`. See `DirectoriesCleanup.nsh` in the Segments directory. +* __DirectoryCleanup:__ Enable support for the sections `[DirectoriesCleanupIfEmpty]` and `[DirectoriesCleanupForce]` in `Wrapper.ini`. See `DirectoriesCleanup.nsh` in the Segments directory. ---------- @@ -257,7 +259,7 @@ CertTimestamp=VeriSign * __Creator:__ Specify here the original developer of the PAF if you're updating someone else's work. -* __CertSigning:__ If set to true, the `Launcher.exe` will automatically be signed using dual signature hashing algorithm standards (_SHA256_ and _SHA1_). I decided to use dual signing because Windows 8 supports SHA256 Code Signing Certificates (SHA-2 hashing algorithm); whereas, Windows 7 may only support SHA-1 Code Signing Certificates (SHA-1 hashing algorithm). It should be noted that Windows 10 has stopped accepting SHA-1 certificates and certificate chains for Authenticode-signed binaries (unless a timestamp marked the binary as being signed before 1/1/2016). You can visit this [Microsoft Security Advisory article][MSAdvisory] on the availability of SHA-2 code signing support for Windows 7 and Windows Server 2008 R2 for more information about this topic. +* __CertSigning:__ If set to true, the `Wrapper.exe` will automatically be signed using dual signature hashing algorithm standards (_SHA256_ and _SHA1_). I decided to use dual signing because Windows 8 supports SHA256 Code Signing Certificates (SHA-2 hashing algorithm); whereas, Windows 7 may only support SHA-1 Code Signing Certificates (SHA-1 hashing algorithm). It should be noted that Windows 10 has stopped accepting SHA-1 certificates and certificate chains for Authenticode-signed binaries (unless a timestamp marked the binary as being signed before 1/1/2016). You can visit this [Microsoft Security Advisory article][MSAdvisory] on the availability of SHA-2 code signing support for Windows 7 and Windows Server 2008 R2 for more information about this topic. >__*ATTENTION:*__ As it is written right now, the `PortableApps.comLauncherGenerator.exe` expects the certificate file to be the developer's name (same as the `[Team]Developer` key's value) and located in `..\Other\Source\Contrib\certificates`. > > _NOTE_: If your certificate requires you to use a password, refer to lines 741 and 742 and input your password on column 62. @@ -313,7 +315,7 @@ GetBetween=true * __UsesGhostscript:__ Specifies whether the portable application makes use of [Ghostscript Portable][GhostscriptPortable]. -* __UsesDotNetVersion:__ Specify the minimum required version of the .NET framework the portable application needs. Values can be from `1.0` through `4.7` (*e.g.* `UsesDotNetVersion=1.1` or `UsesDotNetVersion=4.6.2`). +* __UsesDotNetVersion:__ Specify the minimum required version of the .NET framework the portable application needs. Values can be from `1.0` thru `4.7` (*e.g.* `UsesDotNetVersion=1.1` or `UsesDotNetVersion=4.6.2`). * __UseStdUtils:__ Include the _StdUtils_ plug-in without `ExecAsUser` diff --git a/etc/help.html b/etc/help.html new file mode 100644 index 0000000..6a64c65 --- /dev/null +++ b/etc/help.html @@ -0,0 +1 @@ +

Dummy help file.

\ No newline at end of file diff --git a/etc/source/Debug.nsh b/etc/source/Debug.nsh index 4b2bf0e..e89d0dd 100644 --- a/etc/source/Debug.nsh +++ b/etc/source/Debug.nsh @@ -118,4 +118,4 @@ !macroend !define DebugMsg "!insertmacro DebugMsg" ; }}} -!include /NONFATAL "${PACKAGE}\app\AppInfo\ExtendedDebug.nsh" +!include /NONFATAL "${PACKAGE}\app\AppInfo\Debug.nsh" diff --git a/etc/source/Languages.nsh b/etc/source/Languages.nsh index 581ec95..35bf148 100644 --- a/etc/source/Languages.nsh +++ b/etc/source/Languages.nsh @@ -22,31 +22,70 @@ !appendfile "${LangAutoDetectFile}" "${Case} ${LANG_${_LANG}}$\n" !macroend !define IncludeLang "!insertmacro IncludeLang" - ${IncludeLang} ARABIC + ${IncludeLang} AFRIKAANS + ${IncludeLang} AZERBAIJANI + ${IncludeLang} BELARUSIAN + ${IncludeLang} BULGARIAN ${IncludeLang} CATALAN ${IncludeLang} CZECH - ${IncludeLang} DUTCH + ${IncludeLang} WELSH + ${IncludeLang} DANISH + ${IncludeLang} GERMAN + ${IncludeLang} GREEK ${IncludeLang} ENGLISH + ${IncludeLang} ESPERANTO + ${IncludeLang} SPANISH + ${IncludeLang} ESTONIAN + ${IncludeLang} BASQUE ${IncludeLang} FARSI ${IncludeLang} FINNISH ${IncludeLang} FRENCH - ${IncludeLang} GERMAN - ${IncludeLang} GREEK + ${IncludeLang} IRISH + ${IncludeLang} GALICIAN + ${IncludeLang} GUJARATI + ${IncludeLang} HEBREW + ${IncludeLang} HINDI + ${IncludeLang} CROATIAN ${IncludeLang} HUNGARIAN + ${IncludeLang} ARMENIAN + ${IncludeLang} INDONESIAN + ${IncludeLang} ICELANDIC ${IncludeLang} ITALIAN ${IncludeLang} JAPANESE + ${IncludeLang} GEORGIAN ${IncludeLang} KOREAN + ${IncludeLang} LITHUANIAN + ${IncludeLang} KURDISH + ${IncludeLang} LATVIAN + ${IncludeLang} MACEDONIAN + ${IncludeLang} MONGOLIAN + ${IncludeLang} MARATHI + ${IncludeLang} MALAY + ${IncludeLang} NORWEGIAN + ${IncludeLang} NEPALI + ${IncludeLang} DUTCH + ${IncludeLang} NORWEGIANNYNORSK + ${IncludeLang} PUNJABI ${IncludeLang} POLISH ${IncludeLang} PORTUGUESE ${IncludeLang} PORTUGUESEBR + ${IncludeLang} ROMANIAN ${IncludeLang} RUSSIAN - ${IncludeLang} SIMPCHINESE + ${IncludeLang} SINHALESE + ${IncludeLang} SLOVAK ${IncludeLang} SLOVENIAN - ${IncludeLang} SPANISH + ${IncludeLang} ALBANIAN + ${IncludeLang} SERBIAN + ${IncludeLang} SERBIANLATIN ${IncludeLang} SWEDISH - ${IncludeLang} TRADCHINESE + ${IncludeLang} TAMIL + ${IncludeLang} THAI ${IncludeLang} TURKISH + ${IncludeLang} UKRAINIAN + ${IncludeLang} VALENCIAN ${IncludeLang} VIETNAMESE + ${IncludeLang} SIMPCHINESE + ${IncludeLang} TRADCHINESE !macro LanguageCases !include "${LangAutoDetectFile}" !delfile "${LangAutoDetectFile}" diff --git a/etc/source/PortableAppsCompiler.nsi b/etc/source/PortableAppsCompiler.nsi index e878106..417ba27 100644 --- a/etc/source/PortableAppsCompiler.nsi +++ b/etc/source/PortableAppsCompiler.nsi @@ -49,7 +49,7 @@ ${!ECHO} "${NEWLINE}Reading/Writing Package Definitions...${NEWLINE}${NEWLINE}" !define CONF `${BIN}\Settings\Config` !define DEFSET `$EXEDIR\app\DefaultSettings` !define DEFCONF `${DEFSET}\Config` -!define WRAPPER `${APPINFO}\CompilerWrapper.ini` +!define WRAPPER `${APPINFO}\Wrapper.ini` !define WRAPPER2 `$PLUGINSDIR\wrapper.ini` !define RUNTIME `${BIN}\PortableAppsCompilerRuntimeData-${APPNAME}.ini` !define RUNTIME2 `$PLUGINSDIR\runtimedata.ini` @@ -223,6 +223,7 @@ ${!ECHO} "${NEWLINE}Loading language strings...${NEWLINE}${NEWLINE}" ;= ################ ${!ECHO} "${NEWLINE}Initialising variables and macros...${NEWLINE}${NEWLINE}" Var Bit +Var App Var Admin Var AppID Var BaseName @@ -330,11 +331,8 @@ VIAddVersionKey /LANG=${LANG_ENGLISH} ProductVersion Portable ${Finalize::Sign} `${SHA256}` !endif -!verbose 4 - ;= FUNCTIONS ;= ################ -;=# Check 64-bit Function IsWOW64 !macro _WOW64 _RETURN Push ${_RETURN} @@ -347,9 +345,8 @@ Function IsWOW64 System::Call `${WOW}` Exch $0 FunctionEnd -;=# Prevent Shutdown !include nsDialogs.nsh -!define /ifndef WS_POPUP 0x80000000 +!define /ifndef WS_POPUP 0x80000000 !define CreateWinEx1 `USER32::CreateWindowEx(i0,t"STATIC",t"$(^Name)",` !define CreateWinEx2 `i${WS_CHILD}|${WS_POPUP},i0,i0,i0,i0,pr1,i0,i0,i0)p.r1` !define BlockReason1 `USER32::ShutdownBlockReasonCreate(pr1,w` @@ -361,26 +358,27 @@ Function CreateShutdownBlockReason ${EndIf} System::Call `${BlockReason1}${BlockReason2}` FunctionEnd -;=# Fonts Folder !ifdef FONTS_ENABLED - Function CreateFontsFolder - IfFileExists "${PACKAGE}\App\DefaultSettings\Fonts" +2 - CreateDirectory /SILENT "${PACKAGE}\App\DefaultSettings\Fonts" - IfFileExists "${PACKAGE}\App\DefaultSettings\Fonts\.Portable.Fonts.txt" +11 - !tempfile FONTFILE - !appendfile "${FONTFILE}" "Font(s) added here will be loaded on launch and accessible during runtime.$\n$\n" - !appendfile "${FONTFILE}" "NOTE:$\n" - !appendfile "${FONTFILE}" "$\tThe wrapper will have to load and unload any fonts in this directory.$\n" - !appendfile "${FONTFILE}" "$\tThe more fonts you have will mean a longer work load for the wrapper.$\n$\n" - !appendfile "${FONTFILE}" "Fonts Supported:$\n" - !appendfile "${FONTFILE}" " • .fon$\n • .fnt$\n • .ttf$\n • .ttc$\n • .fot$\n • .otf$\n • .mmm$\n • .pfb$\n • .pfm$\n" - !system 'copy /Y /A "${FONTFILE}" "${PACKAGE}\App\DefaultSettings\Fonts\.Portable.Fonts.txt" /A' - !delfile "${FONTFILE}" - !undef FONTFILE - FunctionEnd +Function CreateFontsFolder + IfFileExists "${PACKAGE}\App\DefaultSettings\Fonts" +2 + CreateDirectory /SILENT "${PACKAGE}\App\DefaultSettings\Fonts" + IfFileExists "${PACKAGE}\App\DefaultSettings\Fonts\.Portable.Fonts.txt" +11 + !tempfile FONTFILE + !appendfile "${FONTFILE}" "Font(s) added here will be loaded on launch and accessible during runtime.$\n$\n" + !appendfile "${FONTFILE}" "NOTE:$\n" + !appendfile "${FONTFILE}" "$\tThe wrapper will have to load and unload any fonts in this directory.$\n" + !appendfile "${FONTFILE}" "$\tThe more fonts you have will mean a longer work load for the wrapper.$\n$\n" + !appendfile "${FONTFILE}" "Fonts Supported:$\n" + !appendfile "${FONTFILE}" " • .fon$\n • .fnt$\n • .ttf$\n • .ttc$\n • .fot$\n • .otf$\n • .mmm$\n • .pfb$\n • .pfm$\n" + !system 'copy /Y /A "${FONTFILE}" "${PACKAGE}\App\DefaultSettings\Fonts\.Portable.Fonts.txt" /A' + !delfile "${FONTFILE}" + !undef FONTFILE +FunctionEnd !endif + +!verbose 4 + Function .onInit - Call CreateShutdownBlockReason Push $0 !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR !ifndef SYSTEMWIDE_DISABLEREDIR @@ -398,15 +396,22 @@ Function .onInit StrCpy $Bit 64 Goto +2 StrCpy $Bit 32 - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${DISABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${DISABLEREDIR}` - !endif - !endif + !ifdef HYBRID + StrCmpS $Bit 32 +6 + IfFileExists `${EXE64}` 0 +5 + SetRegView 64 + StrCpy $App ${APP64} + System::Call `${SET64}` + Goto +3 + StrCpy $App ${APP} + System::Call `${SET32}` + !else if /FileExists "${EXE64}" + SetRegView 64 + StrCpy $App ${APP64} + !else + StrCpy $App ${APP} + !endif + ${DISABLE_REDIRECTION} ${RunSegment} Core ${RunSegment} Custom ${RunSegment} Temp @@ -415,30 +420,11 @@ Function .onInit !ifdef UAC ${RunSegment} RunAsAdmin !endif - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${ENABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${ENABLEREDIR}` - !endif - !endif + ${ENABLE_REDIRECTION} Pop $0 FunctionEnd Function Init - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${DISABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${DISABLEREDIR}` - !endif - !endif - !ifdef FONTS_ENABLED - Call CreateFontsFolder - !endif + ${DISABLE_REDIRECTION} ${If} ${PrimaryInstance} ${RunSegment} Language ${RunSegment} Environment @@ -468,26 +454,13 @@ Function Init ${If} ${PrimaryInstance} ${RunSegment} Settings ${EndIf} - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${ENABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${ENABLEREDIR}` - !endif + !ifdef FONTS_ENABLED + Call CreateFontsFolder !endif + ${ENABLE_REDIRECTION} FunctionEnd Function Pre - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${DISABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${DISABLEREDIR}` - !endif - !endif + ${DISABLE_REDIRECTION} ${If} ${PrimaryInstance} !ifdef SERVICES ${RunSegment} Services @@ -505,26 +478,10 @@ Function Pre ;${RunSegment} LastRunEnvironment ${RunSegment} Environment ${RunSegment} ExecString - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${ENABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${ENABLEREDIR}` - !endif - !endif + ${ENABLE_REDIRECTION} FunctionEnd Function PrePrimary - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${DISABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${DISABLEREDIR}` - !endif - !endif + ${DISABLE_REDIRECTION} ${If} ${PrimaryInstance} !ifdef FileCleanup ${RunSegment} FilesCleanup @@ -553,7 +510,6 @@ Function PrePrimary !endif ${EndIf} !ifdef REGISTRY - ;=== this belongs here after Registering DLLs. ${RunSegment} RegistryValueWrite !endif ${If} ${PrimaryInstance} @@ -567,48 +523,15 @@ Function PrePrimary ${RunSegment} Fonts !endif ${EndIf} - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${ENABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${ENABLEREDIR}` - !endif - !endif + ${ENABLE_REDIRECTION} FunctionEnd Function PreSecondary - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${DISABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${DISABLEREDIR}` - !endif - !endif + ${DISABLE_REDIRECTION} ${RunSegment} Custom - ;${RunSegment} * - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${ENABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${ENABLEREDIR}` - !endif - !endif + ${ENABLE_REDIRECTION} FunctionEnd Function PreExec - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${DISABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${DISABLEREDIR}` - !endif - !endif + ${DISABLE_REDIRECTION} ${RunSegment} Custom ${If} ${PrimaryInstance} !ifdef REGISTERDLL @@ -618,71 +541,22 @@ Function PreExec ${RunSegment} RefreshShellIcons ${RunSegment} WorkingDirectory ${RunSegment} RunBeforeAfter - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${ENABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${ENABLEREDIR}` - !endif - !endif + ${ENABLE_REDIRECTION} FunctionEnd Function PreExecPrimary - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${DISABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${DISABLEREDIR}` - !endif - !endif + ${DISABLE_REDIRECTION} ${RunSegment} Custom ${RunSegment} Core ;${RunSegment} LastRunEnvironment - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${ENABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${ENABLEREDIR}` - !endif - !endif + ${ENABLE_REDIRECTION} FunctionEnd Function PreExecSecondary - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${DISABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${DISABLEREDIR}` - !endif - !endif + ${DISABLE_REDIRECTION} ${RunSegment} Custom - ;${RunSegment} * - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${ENABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${ENABLEREDIR}` - !endif - !endif + ${ENABLE_REDIRECTION} FunctionEnd Function Execute - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${DISABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${DISABLEREDIR}` - !endif - !endif + ${DISABLE_REDIRECTION} !ifmacrodef OverrideExecuteFunction !insertmacro OverrideExecuteFunction !else @@ -764,15 +638,7 @@ Function Execute ${EndIf} ${EndIf} !endif - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${ENABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${ENABLEREDIR}` - !endif - !endif + ${ENABLE_REDIRECTION} FunctionEnd Function PostExecPrimary ${RunSegment} Custom @@ -785,15 +651,7 @@ Function PostExec ${RunSegment} Custom FunctionEnd Function PostPrimary - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${DISABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${DISABLEREDIR}` - !endif - !endif + ${DISABLE_REDIRECTION} ${If} ${PrimaryInstance} !ifdef REGISTERDLL ${RunSegment} RegisterDLL @@ -829,74 +687,24 @@ Function PostPrimary ${RunSegment} RunLocally ${RunSegment} Temp ${RunSegment} Custom - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${ENABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${ENABLEREDIR}` - !endif - !endif + ${ENABLE_REDIRECTION} FunctionEnd Function PostSecondary - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${DISABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${DISABLEREDIR}` - !endif - !endif - ;${RunSegment} * + ${DISABLE_REDIRECTION} ${RunSegment} Custom - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${ENABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${ENABLEREDIR}` - !endif - !endif + ${ENABLE_REDIRECTION} FunctionEnd Function Post - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${DISABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${DISABLEREDIR}` - !endif - !endif + ${DISABLE_REDIRECTION} !ifdef GHOSTSCRIPT ${RunSegment} Ghostscript !endif ${RunSegment} RefreshShellIcons ${RunSegment} Custom - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${ENABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${ENABLEREDIR}` - !endif - !endif + ${ENABLE_REDIRECTION} FunctionEnd Function Unload - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${DISABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${DISABLEREDIR}` - !endif - !endif - ;${RunSegment} XML + ${DISABLE_REDIRECTION} ${If} ${PrimaryInstance} !ifdef REGISTERDLL ${RunSegment} RegisterDLL @@ -916,15 +724,7 @@ Function Unload ${EndIf} ${RunSegment} Core ${RunSegment} Custom - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${ENABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${ENABLEREDIR}` - !endif - !endif + ${ENABLE_REDIRECTION} FunctionEnd !define CallPS `!insertmacro CallPS` !macro CallPS _func _rev @@ -940,16 +740,9 @@ FunctionEnd Call ${_func} !endif !macroend -Section - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${DISABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${DISABLEREDIR}` - !endif - !endif +Section + Call CreateShutdownBlockReason + ${DISABLE_REDIRECTION} Call Init System::Call 'Kernel32::OpenMutex(i1048576, b0, t"${PAC}${APPNAME}-${APPNAME}::Starting") i.R0 ?e' System::Call 'Kernel32::CloseHandle(iR0)' @@ -989,15 +782,7 @@ Section ${CallPS} Post - ${EndIf} Call Unload - !ifdef SYSTEMWIDE_DISABLEREDIR - !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR - IntCmp $Bit 64 0 +2 +2 - System::Call `${ENABLEREDIR}` - !else - StrCmpS $APP ${APP64} 0 +2 - System::Call `${ENABLEREDIR}` - !endif - !endif + ${ENABLE_REDIRECTION} SectionEnd Function .onInstFailed Call Unload diff --git a/etc/source/PortableAppsCompilerDefines.nsh b/etc/source/PortableAppsCompilerDefines.nsh index 5955f4d..71a0b62 100644 --- a/etc/source/PortableAppsCompilerDefines.nsh +++ b/etc/source/PortableAppsCompilerDefines.nsh @@ -7,23 +7,38 @@ ; https://github.com/demondevin/pac-man ; ; PortableAppsCompilerDefines.nsh -; This file was automatically generated by the PortableApps Compiler and should not be edited! +; This file was generated automatically by the PortableApps Compiler. +; It's also created as well as deleted for each new creation process. ; -!define PORTABLEAPPNAME `Komodo IDE Portable` -!define FULLNAME `Komodo IDE` -!define APPNAME `KomodoIDEPortable` -!define APP `KomodoIDE` -!define APPDIR `$EXEDIR\bin\${APP}` -!define APP64 `KomodoIDE64` -!define APPDIR64 `$EXEDIR\bin\${APP64}` -!define PACKAGE_VERSION `11.0.1.0` -!define DEVELOPER `daemon.devin` -!define PUBLISHER `ActiveState Software Inc.` -!define OUTFILE `KomodoIDEPortable.exe` -!define NTFS -!define ConFunc -!define JSON -!define Sleep `500` +!define PORTABLEAPPNAME `7-Zip Portable` +!define FULLNAME `7-Zip` +!define APPNAME `7-ZipPortable` +!define PACKAGE_VERSION `16.4.0.0` +!define APP `7-Zip` +!define APPDIR `$EXEDIR\bin\${APP}` +!define 32 `7-Zip\7zFM.exe` +!define EXE32 `$EXEDIR\bin\${32}` +!define SET32 `Kernel32::SetEnvironmentVariable(t '7-ZIP', t '7-Zip')` +!define APP64 `7-Zip64` +!define APPDIR64 `$EXEDIR\bin\${APP64}` +!define 64 `7-Zip64\7zFM.exe` +!define EXE64 `$EXEDIR\bin\${64}` +!define SET64 `Kernel32::SetEnvironmentVariable(t '7-ZIP', t '7-Zip64')` +!define DEVELOPER `daemon.devin` +!define PUBLISHER `Igor Pavlov` +!define OUTFILE `7-ZipPortable.exe` +!define REPLACE +!define IsFileLocked +!ifndef CloseWindow + !define CloseWindow +!endif +!define Include_WinMessages +!define TrimString +!define CloseProc +!define 64.nsh +!define UAC +!define HYBRID !define REGISTRY -!define XML_PLUGIN -!define FONTS_ENABLE +!define SYSTEMWIDE_DISABLEREDIR +!define ExecAsUser +!define REGISTERDLL diff --git a/etc/source/PortableAppsCompilerMacros.nsh b/etc/source/PortableAppsCompilerMacros.nsh index b32db4a..dc88b40 100644 --- a/etc/source/PortableAppsCompilerMacros.nsh +++ b/etc/source/PortableAppsCompilerMacros.nsh @@ -101,3 +101,27 @@ !macro _DeleteSettings _KEY DeleteINIStr "${CONFIGINI}" "${APPNAME}Settings" "${_KEY}" !macroend +!define DISABLE_REDIRECTION "!insertmacro _DISABLE_REDIRECTION" +!macro _DISABLE_REDIRECTION + !ifdef SYSTEMWIDE_DISABLEREDIR + !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR + IntCmp $Bit 64 0 +2 +2 + System::Call `${DISABLEREDIR}` + !else + StrCmpS $APP ${APP64} 0 +2 + System::Call `${DISABLEREDIR}` + !endif + !endif +!macroend +!define ENABLE_REDIRECTION "!insertmacro _ENABLE_REDIRECTION" +!macro _ENABLE_REDIRECTION + !ifdef SYSTEMWIDE_DISABLEREDIR + !ifdef FORCE_SYSTEMWIDE_DISABLEREDIR + IntCmp $Bit 64 0 +2 +2 + System::Call `${ENABLEREDIR}` + !else + StrCmpS $APP ${APP64} 0 +2 + System::Call `${ENABLEREDIR}` + !endif + !endif +!macroend diff --git a/etc/source/Segments.nsh b/etc/source/Segments.nsh index 9839ece..b427c6f 100644 --- a/etc/source/Segments.nsh +++ b/etc/source/Segments.nsh @@ -121,4 +121,4 @@ !define OverrideExecute "!macro OverrideExecuteFunction" -!include /nonfatal "${PACKAGE}\app\AppInfo\ExtendedWrapper.nsh" +!include /nonfatal "${PACKAGE}\app\AppInfo\ExtendWrapper.nsh" diff --git a/etc/source/Segments/DirectX.nsh b/etc/source/Segments/DirectX.nsh new file mode 100644 index 0000000..9de671e --- /dev/null +++ b/etc/source/Segments/DirectX.nsh @@ -0,0 +1,125 @@ +;=# +; +; PORTABLEAPPS COMPILER +; Developed by daemon.devin +; +; For support visit the GitHub project: +; https://github.com/daemondevin/pac-man +; +; DirectX.nsh +; Checks for a local copy of a DirectX DLL and if not found, registers the DLLs in the portable CommonFiles folder. +; + +; ${FindRegDirectXRuntimes} "DLL" +!define FindRegDirectXRuntimes `!insertmacro _FindRegDirectXRuntimes` +!macro _FindRegDirectXRuntimes _DLL + StrCmpS $Bit 64 0 +6 + ${DISABLEREDIR} + IfFileExists "$SYSDIR\${_DLL}" +3 0 + IfFileExists "$PortableAppsCommonFiles\DirectX64\bin\${_DLL}" 0 +7 + ExecDos::Exec /TOSTACK /DISABLEFSR `"${REGSVR}" /s "$PortableAppsCommonFiles\DirectX64\bin\${_DLL}"` "" "" + ${ENABLEREDIR} + IfFileExists "$SYSDIR\${_DLL}" +3 0 + IfFileExists "$PortableAppsCommonFiles\DirectX\bin\${_DLL}" 0 +4 + ExecDos::Exec /TOSTACK `"${REGSVR}" /s "$PortableAppsCommonFiles\DirectX\bin\${_DLL}"` "" "" + Goto +5 + ${ENABLEREDIR} + MessageBox MB_ICONSTOP|MB_TOPMOST "The ${_DLL} runtime DLL was not found locally or portably!$\r$\n$\r$\nPlease install the DirectX Runtimes Portable plugin to play ${APPNAME}. Aborting!$\r$\n$\r$\nBoth x86/x64 DirectX plugins can be found at:$\r$\nhttp://softables.tk/depository/plugins" + Call Unload + Quit +!macroend +; ${UnRegDirectXRuntimes} "DLL" +!define UnRegDirectXRuntimes `!insertmacro _UnRegDirectXRuntimes` +!macro _UnRegDirectXRuntimes _DLL + ${IfThen} $Bit == 64 ${|} ${DISABLEREDIR} ${|} + ${IfNot} ${FileExists} "$SYSDIR\${_DLL}" + ${If} $Bit == 64 + ExecDos::Exec /TOSTACK /DISABLEFSR `"${REGSVR}" /s /u "$PortableAppsCommonFiles\DirectX64\bin\${_DLL}"` "" "" + ${Else} + ExecDos::Exec /TOSTACK `"${REGSVR}" /s /u "$PortableAppsCommonFiles\DirectX64\bin\${_DLL}"` "" "" + ${EndIf} + ${EndIf} + ${IfThen} $Bit == 64 ${|} ${ENABLEREDIR} ${|} +!macroend + +${SegmentFile} +${SegmentInit} + ; ${If} ${FileExists} "$PortableAppsDirectory\CommonFiles\DirectX64\bin\*.*" + ; FindFirst $0 $1 "$PortableAppsDirectory\CommonFiles\DirectX64\bin\*.dll" + ; ${ElseIf} ${FileExists} "$PortableAppsDirectory\CommonFiles\DirectX\bin\*.*" + ; FindFirst $0 $1 "$PortableAppsDirectory\CommonFiles\DirectX\bin\*.dll" + ; ${EndIf} + ; ${DoUntil} $1 == "" + ; ${FindRegDirectXRuntimes} "$1" + ; FindNext $0 $1 + ; ${Loop} + ; FindClose $0 + + ${FindRegDirectXRuntimes} "xactengine2_0.dll" + ${FindRegDirectXRuntimes} "xactengine2_1.dll" + ${FindRegDirectXRuntimes} "xactengine2_2.dll" + ${FindRegDirectXRuntimes} "xactengine2_3.dll" + ${FindRegDirectXRuntimes} "xactengine2_4.dll" + ${FindRegDirectXRuntimes} "xactengine2_5.dll" + ${FindRegDirectXRuntimes} "xactengine2_6.dll" + ${FindRegDirectXRuntimes} "xactengine2_7.dll" + ${FindRegDirectXRuntimes} "xactengine2_8.dll" + ${FindRegDirectXRuntimes} "xactengine2_9.dll" + ${FindRegDirectXRuntimes} "xactengine2_10.dll" + ${FindRegDirectXRuntimes} "xactengine3_0.dll" + ${FindRegDirectXRuntimes} "xactengine3_1.dll" + ${FindRegDirectXRuntimes} "xactengine3_2.dll" + ${FindRegDirectXRuntimes} "xactengine3_3.dll" + ${FindRegDirectXRuntimes} "xactengine3_4.dll" + ${FindRegDirectXRuntimes} "xactengine3_5.dll" + ${FindRegDirectXRuntimes} "xactengine3_6.dll" + ${FindRegDirectXRuntimes} "xactengine3_7.dll" + ${FindRegDirectXRuntimes} "XAudio2_0.dll" + ${FindRegDirectXRuntimes} "XAudio2_1.dll" + ${FindRegDirectXRuntimes} "XAudio2_2.dll" + ${FindRegDirectXRuntimes} "XAudio2_3.dll" + ${FindRegDirectXRuntimes} "XAudio2_4.dll" + ${FindRegDirectXRuntimes} "XAudio2_5.dll" + ${FindRegDirectXRuntimes} "XAudio2_6.dll" + ${FindRegDirectXRuntimes} "XAudio2_7.dll" +!macroend +${SegmentUnload} + ; ${If} ${FileExists} "$PortableAppsDirectory\CommonFiles\DirectX64\bin\*.*" + ; FindFirst $0 $1 "$PortableAppsDirectory\CommonFiles\DirectX64\bin\*.dll" + ; ${ElseIf} ${FileExists} "$PortableAppsDirectory\CommonFiles\DirectX\bin\*.*" + ; FindFirst $0 $1 "$PortableAppsDirectory\CommonFiles\DirectX\bin\*.dll" + ; ${EndIf} + ; ${DoUntil} $1 == "" + ; ${UnRegDirectXRuntimes} "$1" + ; FindNext $0 $1 + ; ${Loop} + ; FindClose $0 + + ${UnRegDirectXRuntimes} "xactengine2_0.dll" + ${UnRegDirectXRuntimes} "xactengine2_1.dll" + ${UnRegDirectXRuntimes} "xactengine2_2.dll" + ${UnRegDirectXRuntimes} "xactengine2_3.dll" + ${UnRegDirectXRuntimes} "xactengine2_4.dll" + ${UnRegDirectXRuntimes} "xactengine2_5.dll" + ${UnRegDirectXRuntimes} "xactengine2_6.dll" + ${UnRegDirectXRuntimes} "xactengine2_7.dll" + ${UnRegDirectXRuntimes} "xactengine2_8.dll" + ${UnRegDirectXRuntimes} "xactengine2_9.dll" + ${UnRegDirectXRuntimes} "xactengine2_10.dll" + ${UnRegDirectXRuntimes} "xactengine3_0.dll" + ${UnRegDirectXRuntimes} "xactengine3_1.dll" + ${UnRegDirectXRuntimes} "xactengine3_2.dll" + ${UnRegDirectXRuntimes} "xactengine3_3.dll" + ${UnRegDirectXRuntimes} "xactengine3_4.dll" + ${UnRegDirectXRuntimes} "xactengine3_5.dll" + ${UnRegDirectXRuntimes} "xactengine3_6.dll" + ${UnRegDirectXRuntimes} "xactengine3_7.dll" + ${UnRegDirectXRuntimes} "XAudio2_0.dll" + ${UnRegDirectXRuntimes} "XAudio2_1.dll" + ${UnRegDirectXRuntimes} "XAudio2_2.dll" + ${UnRegDirectXRuntimes} "XAudio2_3.dll" + ${UnRegDirectXRuntimes} "XAudio2_4.dll" + ${UnRegDirectXRuntimes} "XAudio2_5.dll" + ${UnRegDirectXRuntimes} "XAudio2_6.dll" + ${UnRegDirectXRuntimes} "XAudio2_7.dll" +!macroend diff --git a/etc/source/Version.nsh b/etc/source/Version.nsh index 1e36e13..b89d373 100644 --- a/etc/source/Version.nsh +++ b/etc/source/Version.nsh @@ -10,5 +10,5 @@ ; This file defines the version of PortableApps Compiler. ; -!define PACVER "2.0.1.0" -!define PACUSERVER "2.0.1" +!define PACVER "2.1.0.0" +!define PACUSERVER "2.1.0" diff --git a/etc/source/CompilerWizard.nsi b/etc/source/WrapperCompiler.nsi similarity index 50% rename from etc/source/CompilerWizard.nsi rename to etc/source/WrapperCompiler.nsi index da5adf0..af22e5f 100644 --- a/etc/source/CompilerWizard.nsi +++ b/etc/source/WrapperCompiler.nsi @@ -6,7 +6,7 @@ ; For support visit the GitHub project: ; https://github.com/demondevin/pac-man ; -; CompilerWizard.nsi +; WrapperCompiler.nsi ; Version 1.1 ; @@ -22,20 +22,24 @@ RequestExecutionLevel user ;= ################ !include RequireLatestNSIS.nsh +;= PAC VERSION +;= ################ +!include Version.nsh + ;= PAC DETAILS ;= ################ Name "PortableApps Compiler" OutFile ..\..\PortableAppsCompiler.exe Icon ..\..\app\AppInfo\appicon.ico Caption "PortableApps Compiler" -VIProductVersion 3.0.0.0 +VIProductVersion ${PACVER} VIAddVersionKey ProductName "PortableApps Compiler" VIAddVersionKey Comments "A small utility for generating a portable wrapper for an application." VIAddVersionKey CompanyName "How Dumb, LLC" VIAddVersionKey LegalCopyright "Copyright daemon.devin" VIAddVersionKey FileDescription "PortableApps Compiler" -VIAddVersionKey FileVersion 3.0.0.0 -VIAddVersionKey ProductVersion 3.0.0.0 +VIAddVersionKey FileVersion ${PACVER} +VIAddVersionKey ProductVersion ${PACVER} VIAddVersionKey InternalName "PortableApps Compiler" VIAddVersionKey OriginalFilename PortableAppsCompiler.exe @@ -52,14 +56,15 @@ SetDatablockOptimize On !include FileFunc.nsh !include LogicLib.nsh !include MUI.nsh -;!include StrRep.nsh +!include nsDialogs.nsh !include NewTextReplace.nsh !AddPluginDir Plugins !include ReplaceInFileWithTextReplace.nsh +!include ForEachPath.nsh ;= ICON & STYLE ;= ################ -!define MUI_ICON "..\..\App\AppInfo\appicon.ico" +!define MUI_ICON "..\..\App\AppInfo\AppIcon.ico" !define MUI_HEADERIMAGE !define MUI_HEADERIMAGE_RIGHT !define MUI_HEADERIMAGE_BITMAP header.bmp @@ -77,11 +82,16 @@ Var PACKAGE Var SKIPWELCOMEPAGE Var AUTOMATICCOMPILE Var DEFINES +Var FGBUILD Var ERROROCCURED -Var AppShortname -Var AppFullname Var AppID +Var AppPName +Var AppFullname +Var AppShortname +Var AppVersion Var Name +Var Hybrid +Var CONVERT ;= PAGES ;= ################ @@ -99,7 +109,7 @@ Page instfiles !define MUI_FINISHPAGE_RUN_NOTCHECKED !define MUI_FINISHPAGE_RUN_TEXT "Test Wrapper" !define MUI_FINISHPAGE_RUN_FUNCTION "RunOnFinish" -!define MUI_FINISHPAGE_SHOWREADME "$EXEDIR\bin\PortableAppsCompilerLog.txt" +!define MUI_FINISHPAGE_SHOWREADME "$EXEDIR\bin\WrapperCompilerLog.txt" !define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED !define MUI_FINISHPAGE_SHOWREADME_TEXT "Review Log" !insertmacro MUI_PAGE_FINISH @@ -107,10 +117,29 @@ Page instfiles ;= DEFINITIONS ;= ################ !define NEWLINE "$\r$\n" -!define EXTENDED "$PACKAGE\App\AppInfo\ExtendedWrapper.nsh" -!define CWRAPPER "$PACKAGE\App\AppInfo\CompilerWrapper.ini" -!define DEFINES "$EXEDIR\etc\Source\PortableAppsCompilerDefines.nsh" -!define DEFSTART ";=# ${NEWLINE}; ${NEWLINE}; PORTABLEAPPS COMPILER${NEWLINE}; Developed by daemon.devin${NEWLINE}; ${NEWLINE}; For support visit the GitHub project:${NEWLINE}; https://github.com/demondevin/pac-man${NEWLINE}; ${NEWLINE}; PortableAppsCompilerDefines.nsh${NEWLINE}; This file was automatically generated by the PortableApps Compiler and should not be edited!${NEWLINE}; ${NEWLINE}" +!define DBUG "Debug.nsh" +!define APPINFOINI "AppInfo.ini" +!define WRAPPERINI "Wrapper.ini" +!define INSTALLINI "Installer.ini" +!define EXTEND "ExtendWrapper.nsh" +!define EXTINS "ExtendInstaller.nsh" +!define APPINFOPATH "$PACKAGE\App\AppInfo\${APPINFOINI}" +!define WRAPPERPATH "$PACKAGE\App\AppInfo\${WRAPPERINI}" +!define EXTENDPATH "$PACKAGE\App\AppInfo\${EXTEND}" +!define EXTINSPATH "$PACKAGE\App\AppInfo\${EXTINS}" +!define DEFINEINC "$EXEDIR\etc\Source\PortableAppsCompilerDefines.nsh" +!define DEFHEADER "${DEFHEADER1}${DEFHEADER2}${DEFHEADER3}${DEFHEADER4}${DEFHEADER5}" +!define DEFHEADER1 ";=# ${NEWLINE}; ${NEWLINE}; PORTABLEAPPS COMPILER${NEWLINE}; Developed by daemon.devin" +!define DEFHEADER2 "${NEWLINE}; ${NEWLINE}; For support visit the GitHub project:${NEWLINE}; " +!define DEFHEADER3 "https://github.com/demondevin/pac-man${NEWLINE}; ${NEWLINE}; PortableAppsCompilerDefines.nsh${NEWLINE}; " +!define DEFHEADER4 "This file was generated automatically by the PortableApps Compiler.${NEWLINE}; " +!define DEFHEADER5 "It's also created as well as deleted for each new creation process.${NEWLINE}; ${NEWLINE}" +!define EXTHEADER "${NEWLINE}${EXTHEADER1}${EXTHEADER2}${EXTHEADER3}${EXTHEADER4}" +!define EXTHEADER1 ";= WRAPPER${NEWLINE};= ################${NEWLINE}; " +!define EXTHEADER2 "This portable application was compiled with${NEWLINE}; " +!define EXTHEADER3 "PortableApps Compiler: Development Edition:${NEWLINE}; " +!define EXTHEADER4 "https://github.com/daemondevin/pac-man/tree/dev${NEWLINE}; ${NEWLINE}" +!define PAInstaller "${EXTINS} -> PortableApps.comInstallerCustom.nsh${NEWLINE}I haven't built an installer compiler yet.${NEWLINE}${NEWLINE}Creating a dummy help.html file so you can still package this build with PA.c Installer" ;= MACROS ;= ################ @@ -120,15 +149,20 @@ Page instfiles !macroend !define ReadWrapperConfig `!insertmacro _ReadWrapperConfig` !macro _ReadWrapperConfig _VALUE _SECTION _KEY - ReadINIStr ${_VALUE} `${_}\App\AppInfo\CompilerWrapper.ini` `${_SECTION}` `${_KEY}` + ReadINIStr ${_VALUE} `${_}\App\AppInfo\${WRAPPERINI}` `${_SECTION}` `${_KEY}` !macroend !define WriteDefineConfig "!insertmacro _WriteDefineConfig" -!macro _WriteDefineConfig _DEFINE _VALUE +!macro _WriteDefineConfig _DEFINE _VALUE _TAB !if ! "${_VALUE}" == "" - FileWrite $DEFINES "!define ${_DEFINE} `${_VALUE}`${NEWLINE}" + DetailPrint "Defining ${_DEFINE}" + SetDetailsPrint none + FileWrite $DEFINES "!define ${_DEFINE}${_TAB}`${_VALUE}`${NEWLINE}" !else + DetailPrint "Defining ${_DEFINE} -> ${_VALUE}" + SetDetailsPrint none FileWrite $DEFINES "!define ${_DEFINE}${NEWLINE}" !endif + SetDetailsPrint lastused !macroend !define AddConditionIfNot "!insertmacro _AddConditionIfNot" !macro _AddConditionIfNot _DEFINE @@ -136,7 +170,7 @@ Page instfiles !macroend !define WriteErrorLog "!insertmacro _WriteErrorLog" !macro _WriteErrorLog _ERROR - FileOpen $9 "$EXEDIR\bin\PortableAppsCompilerLog.txt" a + FileOpen $9 "$EXEDIR\bin\WrapperCompilerLog.txt" a FileSeek $9 0 END FileWrite $9 `ERROR: ${_ERROR}` FileWriteByte $9 "13" @@ -147,7 +181,7 @@ Page instfiles !define ConvertPath "!insertmacro _ConvertPath" !macro _ConvertPath _SOURCE _TARGET ${If} ${FileExists} "$PACKAGE\${_SOURCE}" - DetailPrint "${_SOURCE} -> ${_TARGET}" + DetailPrint "Moving ${_SOURCE} -> ${_TARGET}" SetDetailsPrint none Rename "$PACKAGE\${_SOURCE}" "$PACKAGE\${_TARGET}" SetDetailsPrint lastused @@ -158,13 +192,27 @@ Page instfiles FileOpen $R8 ${_FILE} r FileReadWord $R8 $R7 FileClose $R8 - SetDetailsPrint none ${If} $R7 = 0xFEFF ${ReplaceInFileUTF16LE} ${_FILE} ${_SEARCH} ${_REPLACE} ${Else} ${ReplaceInFile} ${_FILE} ${_SEARCH} ${_REPLACE} ${EndIf} - SetDetailsPrint lastused +!macroend +!define PromptUserInput "!insertmacro _PromptUserInput" +!macro _PromptUserInput _BOXTITLE _FILE _SECTION _KEY _PROMPT _DEFAULTVALUE _VALUE _REQUIRED + ReadINIStr ${_VALUE} "${_FILE}" "${_SECTION}" "${_KEY}" + ${If} ${_VALUE} == "" + StrCpy $9 "${_DEFAULTVALUE}" + DialogsW::InputBox 0 "${_BOXTITLE}" "${_PROMPT}" "OK" "Cancel" 8 9 + ${If} $8 == 1 + StrCpy ${_VALUE} $9 + WriteINIStr "${_FILE}" "${_SECTION}" "${_KEY}" $9 + !if ${_REQUIRED} == required + ${Else} + ${WriteErrorLog} "[${_SECTION}]:${_KEY} is missing from ${_FILE}." + !endif + ${EndIf} + ${EndIf} !macroend ;= LANGUAGES @@ -173,15 +221,182 @@ Page instfiles ;= FUNCTIONS ;= ################ +Function LineReadInFile + !define LineReadInFile `!insertmacro _LineReadInFile` + !macro _LineReadInFile _FILE _NUMBER _RESULT + Push `${_FILE}` + Push `${_NUMBER}` + Call LineReadInFile + Pop ${_RESULT} + !macroend + + Exch $1 + Exch + Exch $0 + Exch + Push $2 + Push $3 + Push $4 + ClearErrors + + IfFileExists $0 0 error + IntOp $1 $1 + 0 + IntCmp $1 0 error 0 plus + StrCpy $4 0 + FileOpen $2 $0 r + IfErrors error + FileRead $2 $3 + IfErrors +3 + IntOp $4 $4 + 1 + Goto -3 + FileClose $2 + IntOp $1 $4 + $1 + IntOp $1 $1 + 1 + IntCmp $1 0 error error + + plus: + FileOpen $2 $0 r + IfErrors error + StrCpy $3 0 + IntOp $3 $3 + 1 + FileRead $2 $0 + IfErrors +4 + StrCmp $3 $1 0 -3 + FileClose $2 + goto end + FileClose $2 + + error: + SetErrors + StrCpy $0 '' + + end: + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Exch $0 +FunctionEnd +Function AddToLineInFile + !define AddToLineInFile `!insertmacro _AddToLineInFile` + !macro _AddToLineInFile _FILE _NUMBER _STRING + Push `${_STRING}` + Push `${_NUMBER}` + Push `${_FILE}` + Call AddToLineInFile + !macroend + + Exch $0 + Exch + Exch $1 + Exch 2 + Exch $2 + Exch 2 + Push $3 + Push $4 + Push $5 + Push $6 + Push $7 + + GetTempFileName $7 + FileOpen $4 $0 r + FileOpen $5 $7 w + StrCpy $3 0 + + Loop: + ClearErrors + FileRead $4 $6 + IfErrors Exit + IntOp $3 $3 + 1 + StrCmp $3 $1 0 +3 + FileWrite $5 "$2$\r$\n$6" + FileWrite $5 "$2$\r$\n" + Goto Loop + FileWrite $5 $6 + Goto Loop + Exit: + + FileClose $5 + FileClose $4 + + SetDetailsPrint none + Delete $0 + Rename $7 $0 + SetDetailsPrint both + + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 +FunctionEnd +Function ReplaceLineInFile + !define ReplaceLineInFile `!insertmacro _ReplaceLineInFile` + !macro _ReplaceLineInFile _FILE _NUMBER _STRING + Push `${_STRING}` + Push `${_NUMBER}` + Push `${_FILE}` + Call ReplaceLineInFile + !macroend + + Exch $0 + Exch + Exch $1 + Exch 2 + Exch $2 + Exch 2 + Push $3 + Push $4 + Push $5 + Push $6 + Push $7 + + GetTempFileName $7 + FileOpen $4 $0 r + FileOpen $5 $7 w + StrCpy $3 0 + + Loop: + ClearErrors + FileRead $4 $6 + IfErrors Exit + IntOp $3 $3 + 1 + StrCmp $3 $1 0 +3 + FileWrite $5 "$2$\r$\n" + Goto Loop + FileWrite $5 $6 + Goto Loop + Exit: + + FileClose $5 + FileClose $4 + + SetDetailsPrint none + Delete $0 + Rename $7 $0 + SetDetailsPrint both + + Pop $7 + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 +FunctionEnd Function .onInit - !insertmacro MUI_INSTALLOPTIONS_EXTRACT "CompilerWizardForm.ini" + !insertmacro MUI_INSTALLOPTIONS_EXTRACT "WrapperCompilerForm.ini" SetOutPath $EXEDIR CreateDirectory $EXEDIR\bin - ReadINIStr $SKIPWELCOMEPAGE $EXEDIR\bin\settings.ini CompilerWizard SkipWelcomePage - ReadINIStr $0 $EXEDIR\bin\settings.ini CompilerWizard Drive - ReadINIStr $PACKAGE $EXEDIR\bin\settings.ini CompilerWizard Package + ReadINIStr $SKIPWELCOMEPAGE $EXEDIR\bin\settings.ini WrapperCompiler SkipWelcomePage + ReadINIStr $0 $EXEDIR\bin\settings.ini WrapperCompiler Drive + ReadINIStr $PACKAGE $EXEDIR\bin\settings.ini WrapperCompiler Package ; Update drive letter; doesn't matter if $0 == "" StrLen $1 $0 StrCpy $2 $PACKAGE $1 @@ -191,10 +406,10 @@ Function .onInit ${EndIf} ;StrCpy $NSIS "$EXEDIR\App\NSIS\makensis.exe" - ReadINIStr $NSIS $EXEDIR\bin\settings.ini CompilerWizard makensis + ReadINIStr $NSIS $EXEDIR\bin\settings.ini WrapperCompiler makensis ${If} $NSIS == "" StrCpy $NSIS ..\NSISPortable\App\NSIS\makensis.exe - WriteINIStr $EXEDIR\bin\settings.ini CompilerWizard makensis $NSIS + WriteINIStr $EXEDIR\bin\settings.ini WrapperCompiler makensis $NSIS ${EndIf} ${GetParameters} $R0 @@ -210,7 +425,7 @@ Function .onInit PreFillForm: ;=== Pre-Fill Path with Directory - WriteINIStr $PLUGINSDIR\CompilerWizardForm.ini "Field 2" "State" "$PACKAGE" + WriteINIStr $PLUGINSDIR\WrapperCompilerForm.ini "Field 2" "State" "$PACKAGE" FunctionEnd Function ShowWelcomeWindow @@ -222,21 +437,21 @@ FunctionEnd Function ShowOptionsWindow !insertmacro MUI_HEADER_TEXT "PortableApps Compiler" "a better alternative to PA.c Launcher" ${IfThen} $AUTOMATICCOMPILE == "true" ${|} Abort ${|} - InstallOptions::InitDialog /NOUNLOAD "$PLUGINSDIR\CompilerWizardForm.ini" + InstallOptions::InitDialog /NOUNLOAD "$PLUGINSDIR\WrapperCompilerForm.ini" Pop $0 InstallOptions::Show FunctionEnd Function LeaveOptionsWindow - ReadINIStr $PACKAGE $PLUGINSDIR\CompilerWizardForm.ini "Field 2" "State" + ReadINIStr $PACKAGE $PLUGINSDIR\WrapperCompilerForm.ini "Field 2" "State" ${If} $PACKAGE == "" MessageBox MB_OK|MB_ICONEXCLAMATION `Please select a valid base directory to create a wrapper for.` Abort ${EndIf} ${GetRoot} $EXEDIR $0 - WriteINIStr $EXEDIR\bin\settings.ini CompilerWizard Drive $0 - WriteINIStr $EXEDIR\bin\settings.ini CompilerWizard Package $PACKAGE + WriteINIStr $EXEDIR\bin\settings.ini WrapperCompiler Drive $0 + WriteINIStr $EXEDIR\bin\settings.ini WrapperCompiler Package $PACKAGE FunctionEnd Function ConvertLanguageEnvironmentVariables @@ -257,13 +472,14 @@ Function ConvertLanguageEnvironmentVariables ${ReplaceInFileUTF16LE} $9 PortableApps.comLocaleName PAC:LanguageName ${ReplaceInFileUTF16LE} $9 PortableApps.comLocaleID PAC:LanguageLCID ; Convert new PAL to PAC - ${ReplaceInFileUTF16LE} $9 PAL:LanguageCode PAC:LanguageCode - ${ReplaceInFileUTF16LE} $9 PAL:LocaleCode2 PAC:LanguageCode2 - ${ReplaceInFileUTF16LE} $9 PAL:LocaleCode3 PAC:LanguageCode3 - ${ReplaceInFileUTF16LE} $9 PAL:LocaleGlibc PAC:LanguageGlibc - ${ReplaceInFileUTF16LE} $9 PAL:LocaleWinName PAC:LanguageNSIS - ${ReplaceInFileUTF16LE} $9 PAL:LocaleName PAC:LanguageName - ${ReplaceInFileUTF16LE} $9 PAL:LocaleID PAC:LanguageLCID + ${ReplaceInFileUTF16LE} $9 PAL:LanguageCode PAC:LanguageCode + ${ReplaceInFileUTF16LE} $9 PAL:LocaleCode2 PAC:LanguageCode2 + ${ReplaceInFileUTF16LE} $9 PAL:LocaleCode3 PAC:LanguageCode3 + ${ReplaceInFileUTF16LE} $9 PAL:LocaleGlibc PAC:LanguageGlibc + ${ReplaceInFileUTF16LE} $9 PAL:LocaleWinName PAC:LanguageNSIS + ${ReplaceInFileUTF16LE} $9 PAL:LocaleName PAC:LanguageName + ${ReplaceInFileUTF16LE} $9 PAL:LocaleID PAC:LanguageLCID + ${ReplaceInFileUTF16LE} $9 PAL:LanguageCustom PAC:LanguageCustom ${Else} ; Convert old PAL to PAC ${ReplaceInFile} $9 PortableApps.comLanguageCode PAC:LanguageCode @@ -274,13 +490,14 @@ Function ConvertLanguageEnvironmentVariables ${ReplaceInFile} $9 PortableApps.comLocaleName PAC:LanguageName ${ReplaceInFile} $9 PortableApps.comLocaleID PAC:LanguageLCID ; Convert new PAL to PAC - ${ReplaceInFile} $9 PAL:LanguageCode PAC:LanguageCode - ${ReplaceInFile} $9 PAL:LocaleCode2 PAC:LanguageCode2 - ${ReplaceInFile} $9 PAL:LocaleCode3 PAC:LanguageCode3 - ${ReplaceInFile} $9 PAL:LocaleGlibc PAC:LanguageGlibc - ${ReplaceInFile} $9 PAL:LocaleWinName PAC:LanguageNSIS - ${ReplaceInFile} $9 PAL:LocaleName PAC:LanguageName - ${ReplaceInFile} $9 PAL:LocaleID PAC:LanguageLCID + ${ReplaceInFile} $9 PAL:LanguageCode PAC:LanguageCode + ${ReplaceInFile} $9 PAL:LocaleCode2 PAC:LanguageCode2 + ${ReplaceInFile} $9 PAL:LocaleCode3 PAC:LanguageCode3 + ${ReplaceInFile} $9 PAL:LocaleGlibc PAC:LanguageGlibc + ${ReplaceInFile} $9 PAL:LocaleWinName PAC:LanguageNSIS + ${ReplaceInFile} $9 PAL:LocaleName PAC:LanguageName + ${ReplaceInFile} $9 PAL:LocaleID PAC:LanguageLCID + ${ReplaceInFile} $9 PAL:LanguageCustom PAC:LanguageCustom ${EndIf} SetDetailsPrint lastused FunctionEnd @@ -326,6 +543,7 @@ Function ConvertDefines ${ReplaceInFileUTF16LE} $9 PAL:LocaleWinName PAC:LanguageNSIS ${ReplaceInFileUTF16LE} $9 PAL:LocaleName PAC:LanguageName ${ReplaceInFileUTF16LE} $9 PAL:LocaleID PAC:LanguageLCID + ${ReplaceInFileUTF16LE} $9 PAL:LanguageCustom PAC:LanguageCustom ${Else} ${ReplaceInFile} $9 PortableApps.comLanguageCode PortableAppsLanguageCode ${ReplaceInFile} $9 PortableApps.comLocaleCode2 PortableAppsLocaleCode2 @@ -358,6 +576,7 @@ Function ConvertDefines ${ReplaceInFile} $9 PAL:LocaleWinName PAC:LanguageNSIS ${ReplaceInFile} $9 PAL:LocaleName PAC:LanguageName ${ReplaceInFile} $9 PAL:LocaleID PAC:LanguageLCID + ${ReplaceInFile} $9 PAL:LanguageCustom PAC:LanguageCustom ${EndIf} SetDetailsPrint lastused FunctionEnd @@ -366,7 +585,7 @@ Section Main ${IfNot} ${FileExists} $NSIS StrCpy $ERROROCCURED true ${WriteErrorLog} "NSIS not found at $NSIS." - MessageBox MB_ICONSTOP "NSIS was not found! (Looked for it in $NSIS)${NEWLINE}${NEWLINE}You can specify a custom path to makensis.exe in $EXEDIR\bin\settings.ini, [CompilerWizard]:makensis" + MessageBox MB_ICONSTOP "NSIS was not found! (Looked for it in $NSIS)${NEWLINE}${NEWLINE}You can specify a custom path to makensis.exe in $EXEDIR\bin\settings.ini, [WrapperCompiler]:makensis" Abort ${EndIf} @@ -378,371 +597,542 @@ Section Main DetailPrint "App: $PACKAGE" DetailPrint " " RealProgress::SetProgress /NOUNLOAD 0 - RealProgress::GradualProgress /NOUNLOAD 1 20 90 "Processing complete." - - ; Convert from PAF to PAC needs to be done.. - ${If} ${FileExists} "$PACKAGE\App\AppInfo\Launcher\Custom.nsh" - ${OrIf} ${FileExists} "$PACKAGE\App\AppInfo\Launcher\Debug.nsh" - DetailPrint "Converting package from PAF to PAC..." - ${ConvertPath} "App\AppInfo\Launcher\Custom.nsh" "App\AppInfo\ExtendedWrapper.nsh" - ${ConvertPath} "App\AppInfo\Launcher\Debug.nsh" "App\AppInfo\ExtendedDebug.nsh" - ${ConvertPath} "App\AppInfo\installer.ini" "App\AppInfo\CompilerInstaller.ini" + RealProgress::GradualProgress /NOUNLOAD 1 20 90 "Process complete." + + ${IfNot} ${FileExists} "${APPINFOPATH}" + StrCpy $ERROROCCURED true + ${WriteErrorLog} "${APPINFOPATH} doesn't exist!" + ${Else} + ${PromptUserInput} \ + "Package Name" \ + "${APPINFOPATH}" \ + "Details" \ + "Name" \ + "What's this package's name? (e.g. Discord Portable):" \ + "App Portable" \ + $Name \ + required + ${PromptUserInput} \ + "Package AppID" \ + "${APPINFOPATH}" \ + "Details" \ + "AppID" \ + "Enter the package's name with no spaces (e.g. DiscordPortable):" \ + "AppPortable" \ + $AppID \ + required + ${PromptUserInput} \ + "Package Version" \ + "${APPINFOPATH}" \ + "Version" \ + "PackageVersion" \ + "Enter the package's version (e.g. 1.2.3.4):" \ + "1.2.3.4" \ + $AppVersion \ + required + + StrCpy $1 $Name "" -8 + ${If} $1 == "Portable" + StrCpy $AppPName $Name + ${Else} + StrCpy $AppPName "$Name Portable" + ${EndIf} + StrCpy $1 $Name "" -8 + ${If} $1 == "Portable" + StrCpy $AppFullname $Name -9 + ${Else} + StrCpy $AppFullname "$Name" + ${EndIf} + StrCpy $1 $AppID "" -8 + ${If} $1 == "Portable" + StrCpy $AppShortname $AppID -8 + ${Else} + StrCpy $AppShortname $AppID + ${EndIf} + + ;Delete existing installer if there is one + Delete "$PACKAGE\$AppID.exe" + ${If} ${FileExists} "$PACKAGE\$AppID.exe" + StrCpy $ERROROCCURED true + ${WriteErrorLog} "ERROR: Cannot remove $PACKAGE\$AppID.exe! Is $AppID currently running?" + ${EndIf} + ${EndIf} - ; Replace old defines to new defines | i.e. ${LAUNCHER} -> ${WRAPPER} - ; Check if it's UTF-16LE - ; FileOpen $0 "${EXTENDED}" r - ; FileReadWord $0 $1 - ; FileClose $0 - ; StrCpy $0 $${ - ; ${If} $1 = 0xFEFF - ; ${If} $5 == UTF-16LE - ; ${ReplaceInFileUTF16LECS} "${EXTENDED}" $0ReadUser} $0ReadUserConfig} - ; ${ReplaceInFileUTF16LECS} "${EXTENDED}" $0LAUNCHER} $0WRAPPER} - ; ${ReplaceInFileUTF16LECS} "${EXTENDED}" $0LAUNCHER2} $0WRAPPER2} - ; ${ReplaceInFileUTF16LECS} "${EXTENDED}" $0OTHER} $0ETC} - ; ${ReplaceInFileUTF16LECS} "${EXTENDED}" $0SETINI} $0CONFIGINI} - ; ${ReplaceInFileUTF16LECS} "${EXTENDED}" $0PAL} $0PAC} - ; ${ReplaceInFileUTF16LECS} "${EXTENDED}" $0DEFSET} $0DEFCONF} - ; ${ReplaceInFileUTF16LECS} "${EXTENDED}" $0DEFDATA} $0DEFSET} - ; ${ReplaceInFileUTF16LECS} "${EXTENDED}" $0ReadLauncherConfig} $0ReadWrapperConfig} - ; ${ReplaceInFileUTF16LECS} "${EXTENDED}" $0WriteLauncherConfig} $0WriteWrapperConfig} - ; ${ReplaceInFileUTF16LECS} "${EXTENDED}" $0DeleteLauncherConfig} $0DeleteWrapperConfig} - ; ${ReplaceInFileUTF16LECS} "${EXTENDED}" $0DeleteLauncherConfigSec} $0DeleteWrapperConfigSec} - ; ${ReplaceInFileUTF16LECS} "${EXTENDED}" $0ReadLauncherConfigWithDefault} $0ReadWrapperConfigWithDefault} - ; ${ReplaceInFileUTF16LECS} "${EXTENDED}" $0PAF} $0TREE} - ; ${ReplaceInFileUTF16LECS} "${EXTENDED}" $0PAFKEYS} $0TREEKEYS} - ; ${Else} - ; ${ReplaceInFileCS} "${EXTENDED}" $0ReadUser} $0ReadUserConfig} - ; ${ReplaceInFileCS} "${EXTENDED}" $0LAUNCHER} $0WRAPPER} - ; ${ReplaceInFileCS} "${EXTENDED}" $0LAUNCHER2} $0WRAPPER2} - ; ${ReplaceInFileCS} "${EXTENDED}" $0OTHER} $0ETC} - ; ${ReplaceInFileCS} "${EXTENDED}" $0SETINI} $0CONFIGINI} - ; ${ReplaceInFileCS} "${EXTENDED}" $0PAL} $0PAC} - ; ${ReplaceInFileCS} "${EXTENDED}" $0DEFSET} $0DEFCONF} - ; ${ReplaceInFileCS} "${EXTENDED}" $0DEFDATA} $0DEFSET} - ; ${ReplaceInFileCS} "${EXTENDED}" $0ReadLauncherConfig} $0ReadWrapperConfig} - ; ${ReplaceInFileCS} "${EXTENDED}" $0WriteLauncherConfig} $0WriteWrapperConfig} - ; ${ReplaceInFileCS} "${EXTENDED}" $0DeleteLauncherConfig} $0DeleteWrapperConfig} - ; ${ReplaceInFileCS} "${EXTENDED}" $0DeleteLauncherConfigSec} $0DeleteWrapperConfigSec} - ; ${ReplaceInFileCS} "${EXTENDED}" $0ReadLauncherConfigWithDefault} $0ReadWrapperConfigWithDefault} - ; ${ReplaceInFileCS} "${EXTENDED}" $0PAF} $0TREE} - ; ${ReplaceInFileCS} "${EXTENDED}" $0PAFKEYS} $0TREEKEYS} + ; Check for old PAF builds and convert them to the new format... + DetailPrint "Checking for old PAF build to convert to the new format..." + DetailPrint " " + + ${If} ${FileExists} "$PACKAGE\App\AppInfo\Launcher\*.*" + StrCpy $CONVERT true + ${EndIf} + + SetDetailsPrint none + ${IfNot} ${FileExists} "$PACKAGE\bin\*.*" + CreateDirectory "$PACKAGE\bin" + ${EndIf} + ${IfNot} ${FileExists} "$PACKAGE\etc\*.*" + CreateDirectory "$PACKAGE\etc" + ${EndIf} + SetDetailsPrint lastused + + ${If} $CONVERT == true + ${If} ${FileExists} "$PACKAGE\App\AppInfo\Launcher\Custom.nsh" + ${ConvertPath} "App\AppInfo\Launcher\Custom.nsh" "App\AppInfo\${EXTEND}" + ${EndIf} + ${If} ${FileExists} "$PACKAGE\App\AppInfo\Launcher\Debug.nsh" + ${ConvertPath} "App\AppInfo\Launcher\Debug.nsh" "App\AppInfo\${DBUG}" + ${EndIf} + ${If} ${FileExists} "$PACKAGE\App\AppInfo\instsller.ini" + ${ConvertPath} "App\AppInfo\installer.ini" "App\AppInfo\${INSTALLINI}" + ${EndIf} + ${If} ${FileExists} "$PACKAGE\App\AppInfo\Launcher\$AppID.ini" + ${ConvertPath} "App\AppInfo\Launcher\$AppID.ini" "App\AppInfo\${WRAPPERINI}" + ${If} ${FileExists} "$PACKAGE\App\AppInfo\Launcher\Source\*.*" + StrCpy $FGBUILD true + DetailPrint "Found a PAF built by FukenGruven!" + DetailPrint "Preserving his old source files..." + DetailPrint "Moving App\AppInfo\Launcher\Source -> etc\FGSource" + SetDetailsPrint none + CopyFiles /SILENT "$PACKAGE\App\AppInfo\Launcher\Source" "$PACKAGE\etc\FGSource" + RMDir /r "$PACKAGE\App\AppInfo\Launcher\Source" + ${EndIf} + RMDir /r "$PACKAGE\App\AppInfo\Launcher" + SetDetailsPrint lastused + ${EndIf} + ${If} ${FileExists} "$PACKAGE\App\$AppShortname\*.*" + DetailPrint "Moving the 32-bit application files..." + DetailPrint "Moving App\$AppShortname -> bin\$AppShortname" + SetDetailsPrint none + CopyFiles /SILENT "$PACKAGE\App\$AppShortname" "$PACKAGE\bin\$AppShortname" + RMDir /r "$PACKAGE\App\$AppShortname" + SetDetailsPrint lastused + ${EndIf} + ${If} ${FileExists} "$PACKAGE\App\$AppShortname64\*.*" + DetailPrint "Moving the 64-bit application files..." + DetailPrint "Moving App\$AppShortname64 -> bin\$AppShortname64" + SetDetailsPrint none + CopyFiles /SILENT "$PACKAGE\App\$AppShortname64" "$PACKAGE\bin\$AppShortname64" + RMDir /r "$PACKAGE\App\$AppShortname64" + SetDetailsPrint lastused + ${EndIf} + ${If} ${FileExists} "$PACKAGE\App\DefaultData\*.*" + ${If} ${FileExists} "$PACKAGE\App\DefaultData\settings\*.*" + ${ConvertPath} "App\DefaultData\settings" "App\DefaultData\Config" + ${EndIf} + ${ConvertPath} "App\DefaultData" "App\DefaultSettings" + ${EndIf} + ${If} ${FileExists} "$PACKAGE\Data\*.*" + ${If} ${FileExists} "$PACKAGE\Data\settings\*.*" + ${ConvertPath} "Data\settings" "Data\Config" + ${EndIf} + DetailPrint "Moving Data -> bin\Settings" + SetDetailsPrint none + CopyFiles /SILENT "$PACKAGE\Data" "$PACKAGE\bin\Settings" + RMDir /r "$PACKAGE\Data" + SetDetailsPrint lastused + ${EndIf} + SetDetailsPrint none + ${If} ${FileExists} "$PACKAGE\App\Readme.txt" + Delete "$PACKAGE\App\Readme.txt" + ${EndIf} + ${If} ${FileExists} "$PACKAGE\help.html" + Delete "$PACKAGE\help.html" + ${EndIf} + ${If} ${FileExists} "$PACKAGE\App\AppInfo\eula.txt" + Rename "$PACKAGE\App\AppInfo\eula.txt" "$PACKAGE\App\AppInfo\eula.txt.temp" + Rename "$PACKAGE\App\AppInfo\eula.txt.temp" "$PACKAGE\App\AppInfo\EULA.txt" + ${EndIf} + ${If} ${FileExists} "$PACKAGE\Other\Source\LauncherLicense.txt" + Delete "$PACKAGE\Other\Source\LauncherLicense.txt" + ${EndIf} + ${If} ${FileExists} "$PACKAGE\Other\Source\COPYING" + Delete "$PACKAGE\Other\Source\COPYING" + ${EndIf} + ${If} ${FileExists} "$PACKAGE\Other\*.*" + ${If} ${FileExists} "$PACKAGE\Other\Help\*.*" + RMDir /r "$PACKAGE\Other\Help" + ${EndIf} + SetDetailsPrint lastused + ${If} ${FileExists} "$PACKAGE\Other\Source\Readme.txt" + ${ConvertPath} "Other\Source\Readme.txt" "etc\README" + ${EndIf} + ${If} ${FileExists} "$PACKAGE\Other\notes.txt" + ${ConvertPath} "Other\notes.txt" "etc\NOTES" + ${EndIf} + ${If} ${FileExists} "$PACKAGE\Other\Source\$AppID.ini" + ${ConvertPath} "Other\Source\$AppID.ini" "etc\$AppID.ini" + ${EndIf} + ${ForEachFile} $5 $6 "$PACKAGE\Other\Source\*.*" + Rename "$5\$6" "etc\$6" + ${NextFile} + ${ForEachFile} $5 $6 "$PACKAGE\Other\*.*" + Rename "$5\$6" "etc\$6" + ${NextFile} + ${If} ${FileExists} "$PACKAGE\Other\Source\PortableApps.comInstallerCustom.nsh" + ${ConvertPath} "Other\Source\PortableApps.comInstallerCustom.nsh" "App\AppInfo\${EXTINS}" + ${EndIf} + SetDetailsPrint none + ${IfNot} ${FileExists} "$PACKAGE\etc\UNLICENSE" + CopyFiles /SILENT "$EXEDIR\etc\UNLICENSE" "$PACKAGE\etc\UNLICENSE" + ${EndIf} + CopyFiles /SILENT "App\Other\*.*" "$PACKAGE\etc" + RMDir /r "$PACKAGE\Other" + Rename "$PACKAGE\App" "$PACKAGE\AppTemp" + Rename "$PACKAGE\AppTemp" "$PACKAGE\app" + Rename "$PACKAGE\App\AppInfo\appinfo.ini" "$PACKAGE\App\AppInfo\appinfo.ini.temp" + Rename "$PACKAGE\App\AppInfo\appinfo.ini.temp" "$PACKAGE\App\AppInfo\AppInfo.ini" + Rename "$PACKAGE\App\AppInfo\appicon.ico" "$PACKAGE\App\AppInfo\appicon.ico.temp" + Rename "$PACKAGE\App\AppInfo\appicon.ico.temp" "$PACKAGE\App\AppInfo\AppIcon.ico" + Rename "$PACKAGE\App\AppInfo\appicon_16.png" "$PACKAGE\App\AppInfo\appicon_16.png.temp" + Rename "$PACKAGE\App\AppInfo\appicon_16.png.temp" "$PACKAGE\App\AppInfo\AppIcon_16.png" + Rename "$PACKAGE\App\AppInfo\appicon_32.png" "$PACKAGE\App\AppInfo\appicon_32.png.temp" + Rename "$PACKAGE\App\AppInfo\appicon_32.png.temp" "$PACKAGE\App\AppInfo\AppIcon_32.png" + Rename "$PACKAGE\App\AppInfo\appicon_128.png" "$PACKAGE\App\AppInfo\appicon_128.png.temp" + Rename "$PACKAGE\App\AppInfo\appicon_128.png.temp" "$PACKAGE\App\AppInfo\AppIcon_128.png" + ClearErrors + ${If} ${FileExists} "$PACKAGE\App\AppInfo\${EXTINS}" + MessageBox MB_ICONEXCLAMATION|MB_TOPMOST "${PAInstaller}" + DetailPrint "Converting ${EXTINS} -> PortableApps.comInstallerCustom.nsh" + ${IfNot} ${FileExists} "$PACKAGE\Other\Source\*.*" + CreateDirectory "$PACKAGE\Other\Source" + ${EndIf} + Rename "$PACKAGE\App\AppInfo\${EXTINS}" "$PACKAGE\Other\Source\PortableApps.comInstallerCustom.nsh" + CopyFiles /SILENT "$EXEDIR\etc\*.html" "$PACKAGE" + ${EndIf} + ; ReadINIStr $0 $EXEDIR\bin\settings.ini WrapperCompiler notified + ; ${If} ${Errors} + ; ${AndIf} $0 != true + ; ReadINIStr $1 $EXEDIR\bin\settings.ini WrapperCompiler help + ; ${If} $1 != false + ; MessageBox MB_ICONEXCLAMATION|MB_TOPMOST "The Help.html was deleted but creating a dummy one now.$\r$\n$\r$\nThis is so you can use the PA.c Installer to package this build." + ; CopyFiles /SILENT "$EXEDIR\etc\*.html" "$PACKAGE" + ; WriteINIStr $EXEDIR\bin\settings.ini WrapperCompiler notified true + ; ${EndIf} + ; MessageBox MB_ICONQUESTION|MB_YESNO|MB_TOPMOST "Keep creating the dummy help.html file for future builds?" /SD IDYES IDNO _DUMMY_NO + ; WriteINIStr $EXEDIR\bin\settings.ini WrapperCompiler help true + ; Goto _DUMMY_END + ; _DUMMY_NO: + ; WriteINIStr $EXEDIR\bin\settings.ini WrapperCompiler help false + ; Delete "$PACKAGE\help.html" + ; MessageBox MB_ICONEXCLAMATION|MB_TOPMOST "Okay. Deleting current help.html file...$\r$\n$\r$\nFuture builds won't have it either!" + ; _DUMMY_END: + ; MessageBox MB_ICONEXCLAMATION|MB_TOPMOST "That was the last time you will see that message." ; ${EndIf} - ; ${EndIf} - ; StrCpy $0 $${ - ; ${StringRIP} "${EXTENDED}" "$0ReadUser}" "$0ReadUserConfig}" - ; ${StringRIP} "${EXTENDED}" "$0ReadUser}" "$0ReadUserConfig}" - ; ${StringRIP} "${EXTENDED}" "$0LAUNCHER}" "$0WRAPPER}" - ; ${StringRIP} "${EXTENDED}" "$0LAUNCHER2}" "$0WRAPPER2}" - ; ${StringRIP} "${EXTENDED}" "$0OTHER}" "$0ETC}" - ; ${StringRIP} "${EXTENDED}" "$0SETINI}" "$0CONFIGINI}" - ; ${StringRIP} "${EXTENDED}" "$0PAL}" "$0PAC}" - ; ${StringRIP} "${EXTENDED}" "$0DEFSET}" "$0DEFCONF}" - ; ${StringRIP} "${EXTENDED}" "$0DEFDATA}" "$0DEFSET}" - ; ${StringRIP} "${EXTENDED}" "$0ReadLauncherConfig}" "$0ReadWrapperConfig}" - ; ${StringRIP} "${EXTENDED}" "$0WriteLauncherConfig}" "$0WriteWrapperConfig}" - ; ${StringRIP} "${EXTENDED}" "$0DeleteLauncherConfig}" "$0DeleteWrapperConfig}" - ; ${StringRIP} "${EXTENDED}" "$0DeleteLauncherConfigSec}" "$0DeleteWrapperConfigSec}" - ; ${StringRIP} "${EXTENDED}" "$0ReadLauncherConfigWithDefault}" "$0ReadWrapperConfigWithDefault}" - ; ${StringRIP} "${EXTENDED}" "$0PAF}" "$0TREE}" - ; ${StringRIP} "${EXTENDED}" "$0PAFKEYS}" "$0TREEKEYS}" - ; ${StringRIP} "${CWRAPPER}" "$0ReadUser}" "$0ReadUserConfig}" - ; ${StringRIP} "${CWRAPPER}" "$0ReadUser}" "$0ReadUserConfig}" - ; ${StringRIP} "${CWRAPPER}" "$0LAUNCHER}" "$0WRAPPER}" - ; ${StringRIP} "${CWRAPPER}" "$0LAUNCHER2}" "$0WRAPPER2}" - ; ${StringRIP} "${CWRAPPER}" "$0OTHER}" "$0ETC}" - ; ${StringRIP} "${CWRAPPER}" "$0SETINI}" "$0CONFIGINI}" - ; ${StringRIP} "${CWRAPPER}" "$0PAL}" "$0PAC}" - ; ${StringRIP} "${CWRAPPER}" "$0DEFSET}" "$0DEFCONF}" - ; ${StringRIP} "${CWRAPPER}" "$0DEFDATA}" "$0DEFSET}" - ; ${StringRIP} "${CWRAPPER}" "$0ReadLauncherConfig}" "$0ReadWrapperConfig}" - ; ${StringRIP} "${CWRAPPER}" "$0WriteLauncherConfig}" "$0WriteWrapperConfig}" - ; ${StringRIP} "${CWRAPPER}" "$0DeleteLauncherConfig}" "$0DeleteWrapperConfig}" - ; ${StringRIP} "${CWRAPPER}" "$0DeleteLauncherConfigSec}" "$0DeleteWrapperConfigSec}" - ; ${StringRIP} "${CWRAPPER}" "$0ReadLauncherConfigWithDefault}" "$0ReadWrapperConfigWithDefault}" - ; ${StringRIP} "${CWRAPPER}" "$0PAF}" "$0TREE}" - ; ${StringRIP} "${CWRAPPER}" "$0PAFKEYS}" "$0TREEKEYS}" - ; DetailPrint " " + ${EndIf} + SetDetailsPrint lastused + + ; Check for old PAF builds and convert them to the new format... + DetailPrint "Process complete." + DetailPrint " " + DetailPrint "Converting all old variables to the new variables..." + DetailPrint "For Example: %PAL:AppDir% -> %PAC:AppDir%" + DetailPrint " " + SetDetailsPrint none + ${StringConvertInFile} "$PACKAGE\bin\Settings\Config\$AppIDSettings.ini" "PAL:" "PAC:" + ${StringConvertInFile} "$PACKAGE\bin\Settings\Config\$AppIDSettings.ini" "PortableApps.comLauncher" "PortableAppsCompiler" + ${StringConvertInFile} "${WRAPPERPATH}" "%PAL:" "%PAC:" + ${StringConvertInFile} "${WRAPPERPATH}" "PortableApps.comLauncher" "PortableAppsCompiler" + ${StringConvertInFile} "${WRAPPERPATH}" "PortableApps.com" "PortableApps" + + Push "${WRAPPERPATH}" + Call ConvertLanguageEnvironmentVariables + Push "${EXTENDPATH}" + Call ConvertDefines + SetDetailsPrint lastused + DetailPrint "Process complete." + DetailPrint " " + ${Else} + DetailPrint "No conversion needed." + DetailPrint " " ${EndIf} + + SetDetailsPrint none + ${If} ${FileExists} "${EXTENDPATH}" + ${LineReadInFile} "${EXTENDPATH}" "2" $R0 + ${If} $R0 != ";= WRAPPER$\r$\n" + FileOpen $0 "${EXTENDPATH}" r + FileOpen $1 "${EXTENDPATH}.temp" w - ; Check if any conversion needs to be done from PAL to PAC - ; DetailPrint "Converting PAL to PAC..." - ; Replace the PA.c language environment variables with their PAC counterparts - Push "${CWRAPPER}" - Call ConvertLanguageEnvironmentVariables - Push "${EXTENDED}" - Call ConvertDefines - ; FindFirst $0 $1 "$PACKAGE\App\AppInfo\*.ini" - ; ${DoUntil} $1 == "" - ; Push "$PACKAGE\App\AppInfo\$1" - ; Call ConvertLanguageEnvironmentVariables - ; FindNext $0 $1 - ; ${Loop} - ; FindClose $0 - DetailPrint " " + FileWrite $1 "${EXTHEADER}" + FileWriteByte $1 "13" + FileWriteByte $1 "10" + _EXT_LOOP: + ClearErrors + FileReadByte $0 $2 + IfErrors _EXT_DONE + FileWriteByte $1 $2 + Goto _EXT_LOOP + _EXT_DONE: + FileClose $0 + FileClose $1 + + Delete "${EXTENDPATH}" + Rename "${EXTENDPATH}.temp" "${EXTENDPATH}" + ${ElseIf} $R0 == ";= LAUNCHER$\r$\n" + ${ReplaceLineInFile} "${EXTENDPATH}" "2" ";= WRAPPER" + ${ReplaceLineInFile} "${EXTENDPATH}" "4" "; This portable application was compiled with" + ${ReplaceLineInFile} "${EXTENDPATH}" "5" "; PortableApps Compiler: Development Edition:" + ${LineReadInFile} "${EXTENDPATH}" "6" $R0 + ${If} $R0 == "$\r$\n" + ${AddToLineInFile} "${EXTENDPATH}" "6" "$\r$\n" + ${EndIf} + ${ReplaceLineInFile} "${EXTENDPATH}" "6" "; https://github.com/daemondevin/pac-man/tree/dev" + ${LineReadInFile} "${EXTENDPATH}" "7" $R0 + ${If} $R0 == "$\r$\n" + ${AddToLineInFile} "${EXTENDPATH}" "7" "$\r$\n" + ${EndIf} + ${ReplaceLineInFile} "${EXTENDPATH}" "7" "; " + ${EndIf} + ${EndIf} + SetDetailsPrint lastused - DetailPrint "Compiling portable wrapper..." + DetailPrint "Compiling the portable wrapper..." + DetailPrint " " SetDetailsPrint none - Delete "$EXEDIR\bin\PortableAppsCompilerLog.txt" + Delete "$EXEDIR\bin\WrapperCompilerLog.txt" - Delete "${DEFINES}" + Delete "${DEFINEINC}" !ifdef CustomIconAndName !define _ $PACKAGE !else !define _ $EXEDIR !endif + SetDetailsPrint lastused - Delete "${DEFINES}" - - ; Read/write the needed defines to PortableAppsCompilerDefines.nsh - FileOpen $DEFINES "${DEFINES}" a - FileSeek $DEFINES 0 END - FileWrite $DEFINES `${DEFSTART}` + ; Read/write the needed defines to PortableAppsCompilerDefines.nsh + DetailPrint "Writing the wrapper's configuration settings..." + DetailPrint " " + FileOpen $DEFINES "${DEFINEINC}" w + FileWrite $DEFINES "${DEFHEADER}" + FileWriteByte $9 "13" + FileWriteByte $9 "10" ${IfNot} ${FileExists} "${_}\App\AppInfo\AppInfo.ini" StrCpy $ERROROCCURED true ${WriteErrorLog} "${_}\App\AppInfo\AppInfo.ini doesn't exist!" ${Else} - ; ${ReadAppInfoConfig} $0 "Section" "Key" - ; ${WriteDefineConfig} "Define" "Value" ClearErrors - ${ReadAppInfoConfig} $Name "Details" "Name" - ${WriteDefineConfig} "PORTABLEAPPNAME" "$Name" - StrCpy $AppFullname $Name -9 - ${WriteDefineConfig} "FULLNAME" "$AppFullname" + ${WriteDefineConfig} "PORTABLEAPPNAME" "$AppPName" "$\t" + ${WriteDefineConfig} "FULLNAME" "$AppFullname" "$\t$\t" + ${WriteDefineConfig} "APPNAME" "$AppID" "$\t$\t$\t" + ${WriteDefineConfig} "PACKAGE_VERSION" "$AppVersion" "$\t" - ${ReadAppInfoConfig} $AppID "Details" "AppID" - ${WriteDefineConfig} "APPNAME" "$AppID" - StrCpy $AppShortname $AppID -8 - ${WriteDefineConfig} "APP" "$AppShortname" - ${WriteDefineConfig} "APPDIR" "$$EXEDIR\bin\$${APP}" - ${WriteDefineConfig} "APP64" "$AppShortname64" - ${WriteDefineConfig} "APPDIR64" "$$EXEDIR\bin\$${APP64}" - - ${ReadAppInfoConfig} $1 "Version" "PackageVersion" - ${WriteDefineConfig} "PACKAGE_VERSION" "$1" - - ${If} ${Errors} - StrCpy $ERROROCCURED true - ${WriteErrorLog} "[Details]:Name [Details]:AppID or [Version]:PackageVersion not found in appinfo.ini files" + ClearErrors + ${ReadWrapperConfig} $Hybrid "Activate" "DualMode" + ${IfNot} ${Errors} + ${AndIf} $Hybrid != "" + ${WriteDefineConfig} "APP" "$AppShortname" "$\t$\t$\t$\t" + ${WriteDefineConfig} "APPDIR" "$$EXEDIR\bin\$${APP}" "$\t$\t$\t" + ${ReadWrapperConfig} $0 "Launch" "ProgramExecutable" + ${IfNot} ${Errors} + ${WriteDefineConfig} "32" "$0" "$\t$\t$\t$\t" + ${WriteDefineConfig} "EXE32" "$$EXEDIR\bin\$${32}" "$\t$\t$\t" + ${WriteDefineConfig} "SET32" "Kernel32::SetEnvironmentVariable(t'$Hybrid',t'$AppShortname')" "$\t$\t$\t" + ${EndIf} + ${WriteDefineConfig} "APP64" "$AppShortname64" "$\t$\t$\t" + ${WriteDefineConfig} "APPDIR64" "$$EXEDIR\bin\$${APP64}" "$\t$\t" + ClearErrors + ${ReadWrapperConfig} $0 "Launch" "ProgramExecutable64" + ${IfNot} ${Errors} + ${WriteDefineConfig} "64" "$0" "$\t$\t$\t$\t" + ${WriteDefineConfig} "EXE64" "$$EXEDIR\bin\$${64}" "$\t$\t$\t" + ${WriteDefineConfig} "SET64" "Kernel32::SetEnvironmentVariable(t'$Hybrid',t'$AppShortname64')" "$\t$\t$\t" + ${EndIf} ${Else} - ;Delete existing installer if there is one - Delete "$PACKAGE\$AppID.exe" - ${If} ${FileExists} "$PACKAGE\$AppID.exe" - StrCpy $ERROROCCURED true - ${WriteErrorLog} "ERROR: Cannot remove $PACKAGE\$AppID.exe! Is $AppID currently running?" + ${ReadWrapperConfig} $0 "Launch" "ProgramExecutable64" + ${IfNot} ${Errors} + ${WriteDefineConfig} "APP64" "$AppShortname64" "$\t$\t$\t$\t" + ${WriteDefineConfig} "APPDIR64" "$$EXEDIR\bin\$${APP64}" "$\t$\t$\t" + ${Else} + ${WriteDefineConfig} "APP" "$AppShortname" "$\t$\t$\t$\t" + ${WriteDefineConfig} "APPDIR" "$$EXEDIR\bin\$${APP}" "$\t$\t$\t" ${EndIf} ${EndIf} - ClearErrors - ${ReadAppInfoConfig} $0 "Team" "Developer" + ${PromptUserInput} \ + "Developer" \ + "${_}\App\AppInfo\AppInfo.ini" \ + "Team" \ + "Developer" \ + "Who's making this package? (e.g. daemon.devin):" \ + "PortableAppsCompiler" \ + $0 \ + optional ${If} $0 == "demon.devin" StrCpy $0 "daemon.devin" + WriteINIStr "${_}\App\AppInfo\AppInfo.ini" "Team" "Developer" "$0" ${EndIf} - ${WriteDefineConfig} "DEVELOPER" "$0" + ${WriteDefineConfig} "DEVELOPER" "$0" "$\t$\t" ClearErrors ${ReadAppInfoConfig} $0 "Team" "Contributors" ${IfNot} ${Errors} - ${WriteDefineConfig} "CONTRIBUTORS" "$0" + ${WriteDefineConfig} "CONTRIBUTORS" "$0" "$\t" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Details" "Publisher" ${IfNot} ${Errors} - ${WriteDefineConfig} "PUBLISHER" "$0" + ${WriteDefineConfig} "PUBLISHER" "$0" "$\t$\t" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Details" "Trademarks" ${IfNot} ${Errors} - ${WriteDefineConfig} "TRADEMARK" "$0" + ${WriteDefineConfig} "TRADEMARK" "$0" "$\t$\t" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Control" "Start" ${IfNot} ${Errors} - ${WriteDefineConfig} "OUTFILE" "$0" + ${WriteDefineConfig} "OUTFILE" "$0" "$\t$\t$\t" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "UsesDotNetVersion" ${IfNot} ${Errors} ${If} $0 != false - ${WriteDefineConfig} "DOTNET" "" + ${WriteDefineConfig} "DOTNET" "" "" ${EndIf} ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "UseStdUtils" ${IfNot} ${Errors} - ${WriteDefineConfig} "UseStdUtils" "" + ${WriteDefineConfig} "UseStdUtils" "" "" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "INF_Install" ${IfNot} ${Errors} - ${WriteDefineConfig} "INF_Install" "" + ${WriteDefineConfig} "INF_Install" "" "" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "RegistryValueWrite" ${IfNot} ${Errors} - ${WriteDefineConfig} "RegSleep" "50" + ${WriteDefineConfig} "RegSleep" "50" "$\t$\t" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "FileWriteReplace" ${IfNot} ${Errors} - ${WriteDefineConfig} "REPLACE" "" + ${WriteDefineConfig} "REPLACE" "" "" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "CloseWindow" ${IfNot} ${Errors} - ${WriteDefineConfig} "CloseWindow" "" + ${WriteDefineConfig} "CloseWindow" "" "" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "FileLocking" ${IfNot} ${Errors} - ${WriteDefineConfig} "IsFileLocked" "" + ${WriteDefineConfig} "IsFileLocked" "" "" ${AddConditionIfNot} "CloseWindow" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "Firewall" ${IfNot} ${Errors} - ${WriteDefineConfig} "FIREWALL" "" + ${WriteDefineConfig} "FIREWALL" "" "" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "Junctions" ${IfNot} ${Errors} - ${WriteDefineConfig} "NTFS" "" + ${WriteDefineConfig} "NTFS" "" "" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "ACLRegSupport" ${IfNot} ${Errors} - ${WriteDefineConfig} "ACL" "" + ${WriteDefineConfig} "ACL" "" "" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "ACLDirSupport" ${IfNot} ${Errors} - ${WriteDefineConfig} "ACL_DIR" "" + ${WriteDefineConfig} "ACL_DIR" "" "" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "RMEmptyDir" ${IfNot} ${Errors} - ${WriteDefineConfig} "RMEMPTYDIRECTORIES" "" + ${WriteDefineConfig} "RMEMPTYDIRECTORIES" "" "" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "LocalLow" ${IfNot} ${Errors} - ${WriteDefineConfig} "LocalLow" "" + ${WriteDefineConfig} "LocalLow" "" "" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "PublicDoc" ${IfNot} ${Errors} - ${WriteDefineConfig} "PublicDoc" "" + ${WriteDefineConfig} "PublicDoc" "" "" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "CompareVersions" ${IfNot} ${Errors} - ${WriteDefineConfig} "CompareVersions" "" + ${WriteDefineConfig} "CompareVersions" "" "" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "ConfigFunctions" ${IfNot} ${Errors} - ${WriteDefineConfig} "ConFunc" "" + ${WriteDefineConfig} "ConFunc" "" "" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "JSONSupport" ${IfNot} ${Errors} - ${WriteDefineConfig} "JSON" "" + ${WriteDefineConfig} "JSON" "" "" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "RestartSleep" ${IfNot} ${Errors} - ${WriteDefineConfig} "Sleep" "$0" + ${WriteDefineConfig} "Sleep" "$0" "$\t$\t$\t" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "WinMessages" ${IfNot} ${Errors} - ${WriteDefineConfig} "Include_WinMessages" "" + ${WriteDefineConfig} "Include_WinMessages" "" "" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "LineWrite" ${IfNot} ${Errors} - ${WriteDefineConfig} "Include_LineWrite" "" + ${WriteDefineConfig} "Include_LineWrite" "" "" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "TrimString" ${IfNot} ${Errors} - ${WriteDefineConfig} "TrimString" "" + ${WriteDefineConfig} "TrimString" "" "" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "CloseProcess" ${IfNot} ${Errors} - ${WriteDefineConfig} "CloseProc" "" + ${WriteDefineConfig} "CloseProc" "" "" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "Include64" ${IfNot} ${Errors} - ${WriteDefineConfig} "64.nsh" "" + ${WriteDefineConfig} "64.nsh" "" "" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "IncludeWordRep" ${IfNot} ${Errors} - ${WriteDefineConfig} "Include_WordRep" "" + ${WriteDefineConfig} "Include_WordRep" "" "" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "GetBetween" ${IfNot} ${Errors} - ${WriteDefineConfig} "GetBetween.nsh" "" + ${WriteDefineConfig} "GetBetween.nsh" "" "" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "DisableLanguageCustom" ${IfNot} ${Errors} - ${WriteDefineConfig} "DisablePAC:LanguageCustom" "" + ${WriteDefineConfig} "DisablePAC:LanguageCustom" "" "" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "DisableProgramExecSegment" ${IfNot} ${Errors} - ${WriteDefineConfig} "DisableProgramExecSegment" "" + ${WriteDefineConfig} "DisableProgramExecSegment" "" "" ${EndIf} ClearErrors ${ReadAppInfoConfig} $0 "Dependencies" "TLB_FUNCTION" ${IfNot} ${Errors} - ${WriteDefineConfig} "TLB_FUNCTION" "" - ${EndIf} - - ${EndIf} - - ${If} ${FileExists} "$PACKAGE\App\AppInfo\Launcher\$AppID.ini" - ${ConvertPath} "App\AppInfo\Launcher\$AppID.ini" "App\AppInfo\CompilerWrapper.ini" - RMDir /r "$PACKAGE\App\AppInfo\Launcher" - ${EndIf} - ${If} ${FileExists} "$PACKAGE\App\$AppShortname\*.*" - CopyFiles /SILENT "$PACKAGE\App\$AppShortname" "$PACKAGE\bin\$AppShortname" - RMDir /r "$PACKAGE\App\$AppShortname" - ${EndIf} - ${If} ${FileExists} "$PACKAGE\App\$AppShortname64\*.*" - CopyFiles /SILENT "$PACKAGE\App\$AppShortname64" "$PACKAGE\bin\$AppShortname64" - RMDir /r "$PACKAGE\App\$AppShortname64" - ${EndIf} - ${If} ${FileExists} "$PACKAGE\App\DefaultData\*.*" - ${If} ${FileExists} "$PACKAGE\App\DefaultData\settings\*.*" - Rename "$PACKAGE\App\DefaultData\settings" "$PACKAGE\App\DefaultData\Config" - ${EndIf} - Rename "$PACKAGE\App\DefaultData" "$PACKAGE\App\DefaultSettings" - ${EndIf} - ${If} ${FileExists} "$PACKAGE\Data\*.*" - ${If} ${FileExists} "$PACKAGE\Data\settings\*.*" - Rename "$PACKAGE\Data\settings" "$PACKAGE\Data\Config" + ${WriteDefineConfig} "TLB_FUNCTION" "" "" ${EndIf} - CopyFiles /SILENT "$PACKAGE\Data" "$PACKAGE\bin\Settings" - RMDir /r "$PACKAGE\Data" ${EndIf} - ${StringConvertInFile} "$PACKAGE\bin\Settings\Config\$AppIDSettings.ini" PAL: PAC: - ${StringConvertInFile} "$PACKAGE\bin\Settings\Config\$AppIDSettings.ini" PortableApps.comLauncher PortableAppsCompiler - ${StringConvertInFile} "${CWRAPPER}" %PAL: %PAC: - ${StringConvertInFile} "${CWRAPPER}" PortableApps.comLauncher PortableAppsCompiler - ${StringConvertInFile} "${CWRAPPER}" PortableApps.com PortableApps - - ${IfNot} ${FileExists} "${_}\App\AppInfo\CompilerWrapper.ini" + ${IfNot} ${FileExists} "${_}\App\AppInfo\${WRAPPERINI}" StrCpy $ERROROCCURED true - ${WriteErrorLog} "${_}\App\AppInfo\CompilerWrapper.ini doesn't exist!" + ${WriteErrorLog} "${_}\App\AppInfo\${WRAPPERINI} doesn't exist!" ${Else} ClearErrors ${ReadWrapperConfig} $0 "Launch" "RunAsAdmin" @@ -750,170 +1140,104 @@ Section Main ${If} $0 == "try" ${OrIf} $0 == "force" ${OrIf} $0 == "compile-force" - ${WriteDefineConfig} "UAC" "" + ${WriteDefineConfig} "UAC" "" "" ${EndIf} ${EndIf} ClearErrors + ${ReadWrapperConfig} $0 "Activate" "DualMode" + ${IfNot} ${Errors} + ${WriteDefineConfig} "HYBRID" "" "" + ${EndIf} + ClearErrors ${ReadWrapperConfig} $0 "Activate" "Registry" ${IfNot} ${Errors} - ${WriteDefineConfig} "REGISTRY" "" + ${WriteDefineConfig} "REGISTRY" "" "" ${EndIf} ClearErrors ${ReadWrapperConfig} $0 "Activate" "RegRedirection" ${IfNot} ${Errors} - ${WriteDefineConfig} "DISABLEFSR" "" + ${WriteDefineConfig} "DISABLEFSR" "" "" ${EndIf} ClearErrors ${ReadWrapperConfig} $0 "Activate" "RegCopyKeys" ${IfNot} ${Errors} - ${WriteDefineConfig} "RegCopy" "" + ${WriteDefineConfig} "RegCopy" "" "" ${EndIf} ClearErrors ${ReadWrapperConfig} $0 "Activate" "Redirection" ${IfNot} ${Errors} - ${WriteDefineConfig} "SYSTEMWIDE_DISABLEREDIR" "" + ${WriteDefineConfig} "SYSTEMWIDE_DISABLEREDIR" "" "" ${EndIf} ClearErrors ${ReadWrapperConfig} $0 "Activate" "ForceRedirection" ${IfNot} ${Errors} - ${WriteDefineConfig} "FORCE_SYSTEMWIDE_DISABLEREDIR" "" + ${WriteDefineConfig} "FORCE_SYSTEMWIDE_DISABLEREDIR" "" "" ${EndIf} ClearErrors ${ReadWrapperConfig} $0 "Activate" "ExecAsUser" ${IfNot} ${Errors} - ${WriteDefineConfig} "ExecAsUser" "" + ${WriteDefineConfig} "ExecAsUser" "" "" ${EndIf} ClearErrors ${ReadWrapperConfig} $0 "Activate" "Services" ${IfNot} ${Errors} - ${WriteDefineConfig} "SERVICES" "" + ${WriteDefineConfig} "SERVICES" "" "" ${EndIf} ClearErrors ${ReadWrapperConfig} $0 "Activate" "RegDLLs" ${IfNot} ${Errors} - ${WriteDefineConfig} "REGISTERDLL" "" + ${WriteDefineConfig} "REGISTERDLL" "" "" ${EndIf} ClearErrors ${ReadWrapperConfig} $0 "Activate" "Tasks" ${IfNot} ${Errors} - ${WriteDefineConfig} "TaskCleanUp" "" + ${WriteDefineConfig} "TaskCleanUp" "" "" ${EndIf} ClearErrors ${ReadWrapperConfig} $0 "Activate" "Java" ${IfNot} ${Errors} ${If} $0 == "find" ${OrIf} $0 == "require" - ${WriteDefineConfig} "JAVA" "" + ${WriteDefineConfig} "JAVA" "" "" ${EndIf} ${EndIf} ClearErrors ${ReadWrapperConfig} $0 "Activate" "XML" ${IfNot} ${Errors} - ${WriteDefineConfig} "XML_PLUGIN" "" + ${WriteDefineConfig} "XML_PLUGIN" "" "" ${EndIf} ClearErrors ${ReadWrapperConfig} $0 "Activate" "Ghostscript" ${IfNot} ${Errors} - ${WriteDefineConfig} "GHOSTSCRIPT" "" + ${WriteDefineConfig} "GHOSTSCRIPT" "" "" ${EndIf} ClearErrors ${ReadWrapperConfig} $0 "Activate" "FontsFolder" ${IfNot} ${Errors} - ${WriteDefineConfig} "FONTS_ENABLE" "" + ${WriteDefineConfig} "FONTS_ENABLE" "" "" ${EndIf} ClearErrors ${ReadWrapperConfig} $0 "Activate" "FileCleanup" ${IfNot} ${Errors} - ${WriteDefineConfig} "FileCleanup" "" + ${WriteDefineConfig} "FileCleanup" "" "" ${EndIf} ClearErrors ${ReadWrapperConfig} $0 "Activate" "DirectoryCleanup" ${IfNot} ${Errors} - ${WriteDefineConfig} "DirectoryCleanup" "" + ${WriteDefineConfig} "DirectoryCleanup" "" "" ${EndIf} FileClose $DEFINES - - ${If} ${FileExists} "$PACKAGE\App\Readme.txt" - Delete "$PACKAGE\App\Readme.txt" - ${EndIf} - ${If} ${FileExists} "$PACKAGE\help.html" - Delete "$PACKAGE\help.html" - ${EndIf} - ${If} ${FileExists} "$PACKAGE\App\AppInfo\eula.txt" - Rename "$PACKAGE\App\AppInfo\eula.txt" "$PACKAGE\App\AppInfo\eula.txt.temp" - Rename "$PACKAGE\App\AppInfo\eula.txt.temp" "$PACKAGE\App\AppInfo\EULA.txt" - ${EndIf} - ${If} ${FileExists} "$PACKAGE\App\DefaultData\*.*" - ${ConvertPath} "App\DefaultData" "App\DefaultSettings" - ${EndIf} - ${If} ${FileExists} "$PACKAGE\Other\*.*" - ${If} ${FileExists} "$PACKAGE\Other\Help\*.*" - RMDir /r "$PACKAGE\Other\Help" - ${EndIf} - ${IfNot} ${FileExists} "$PACKAGE\bin\*.*" - CreateDirectory "$PACKAGE\bin" - ${EndIf} - ${IfNot} ${FileExists} "$PACKAGE\etc\*.*" - CreateDirectory "$PACKAGE\etc" - ${EndIf} - ${If} ${FileExists} "$PACKAGE\Other\Source\PortableApps.comInstallerCustom.nsh" - ${ConvertPath} "Other\Source\PortableApps.comInstallerCustom.nsh" "App\AppInfo\ExtendedInstaller.nsh" - ${EndIf} - ${If} ${FileExists} "$PACKAGE\Other\Source\$AppID.ini" - ${ConvertPath} "Other\Source\$AppID.ini" "etc\$AppID.ini" - Delete "$PACKAGE\Other\Source\$AppID.ini" - ${EndIf} - ${If} ${FileExists} "$PACKAGE\Other\Source\Readme.txt" - ${ConvertPath} "Other\Source\Readme.txt" "etc\README" - Delete "$PACKAGE\Other\Source\Readme.txt" - ${EndIf} - ${If} ${FileExists} "$PACKAGE\Other\notes.txt" - ${ConvertPath} "Other\notes.txt" "etc\NOTES" - Delete "$PACKAGE\Other\notes.txt" - ${EndIf} - ${If} ${FileExists} "$PACKAGE\Other\*.nsi" - ${ConvertPath} "Other\*.nsi" "etc\*.nsi" - Delete "$PACKAGE\Other\*.nsi" - ${EndIf} - ${If} ${FileExists} "$PACKAGE\Other\*.png" - ${ConvertPath} "Other\*.png" "etc\*.png" - Delete "$PACKAGE\Other\*.png" - ${EndIf} - ${If} ${FileExists} "$PACKAGE\Other\Source\LauncherLicense.txt" - Delete "$PACKAGE\Other\Source\LauncherLicense.txt" - ${EndIf} - ${If} ${FileExists} "$PACKAGE\Other\Source\COPYING" - Delete "$PACKAGE\Other\Source\COPYING" - ${EndIf} - ${IfNot} ${FileExists} "$PACKAGE\etc\UNLICENSE" - CopyFiles /SILENT "$EXEDIR\etc\UNLICENSE" "$PACKAGE\etc\UNLICENSE" - ${EndIf} - CopyFiles /SILENT "App\Other\*.*" "$PACKAGE\etc" - RMDir /r "$PACKAGE\Other" - Rename "$PACKAGE\App" "$PACKAGE\AppTemp" - Rename "$PACKAGE\AppTemp" "$PACKAGE\app" - Rename "$PACKAGE\App\AppInfo\appinfo.ini" "$PACKAGE\App\AppInfo\appinfo.ini.temp" - Rename "$PACKAGE\App\AppInfo\appinfo.ini.temp" "$PACKAGE\App\AppInfo\AppInfo.ini" - Rename "$PACKAGE\App\AppInfo\appicon.ico" "$PACKAGE\App\AppInfo\appicon.ico.temp" - Rename "$PACKAGE\App\AppInfo\appicon.ico.temp" "$PACKAGE\App\AppInfo\AppIcon.ico" - Rename "$PACKAGE\App\AppInfo\appicon_16.png" "$PACKAGE\App\AppInfo\appicon_16.png.temp" - Rename "$PACKAGE\App\AppInfo\appicon_16.png.temp" "$PACKAGE\App\AppInfo\AppIcon_16.png" - Rename "$PACKAGE\App\AppInfo\appicon_32.png" "$PACKAGE\App\AppInfo\appicon_32.png.temp" - Rename "$PACKAGE\App\AppInfo\appicon_32.png.temp" "$PACKAGE\App\AppInfo\AppIcon_32.png" - Rename "$PACKAGE\App\AppInfo\appicon_128.png" "$PACKAGE\App\AppInfo\appicon_128.png.temp" - Rename "$PACKAGE\App\AppInfo\appicon_128.png.temp" "$PACKAGE\App\AppInfo\AppIcon_128.png" - ${EndIf} StrCpy $2 "" ; See if we need to enable XML - ReadINIStr $3 "${_}\App\AppInfo\CompilerWrapper.ini" Activate XML + ReadINIStr $3 "${_}\App\AppInfo\${WRAPPERINI}" Activate XML ${If} $3 == true StrCpy $2 "$2 /DXML_ENABLED" ${EndIf} ; See if we need to use the RequestExecutionLevel admin - ReadINIStr $3 "${_}\App\AppInfo\CompilerWrapper.ini" Launch RunAsAdmin + ReadINIStr $3 "${_}\App\AppInfo\${WRAPPERINI}" Launch RunAsAdmin ${If} $3 == compile-force StrCpy $2 "$2 /DRUNASADMIN_COMPILEFORCE" ${EndIf} @@ -922,17 +1246,32 @@ Section Main ReadINIStr $3 "${_}\App\AppInfo\AppInfo.ini" Team CertSigning ${If} $3 == true StrCpy $2 "$2 /DCertificate" - ReadINIStr $4 "${_}\App\AppInfo\AppInfo.ini" Team CertExtension - StrCpy $2 "$2 /DCertExtension=$4" - ReadINIStr $5 "${_}\App\AppInfo\AppInfo.ini" Team CertTimestamp - StrCpy $2 "$2 /DCertTimestamp=$5" + ${PromptUserInput} \ + "Code Signing" \ + "${_}\App\AppInfo\AppInfo.ini" \ + "Team" \ + "CertExtension" \ + "What's the extension of you're certificate? (e.g. pfx):" \ + "p12" \ + $5 \ + optional + StrCpy $2 "$2 /DCertExtension=$5" + ${PromptUserInput} \ + "Code Signing" \ + "${_}\App\AppInfo\AppInfo.ini" \ + "Team" \ + "CertTimestamp" \ + "What time-stamp service to use? (e.g. GlobalSign):" \ + "Comodo" \ + $6 \ + optional + StrCpy $2 "$2 /DCertTimestamp=$6" ${EndIf} - ${EndIf} ${If} $ERROROCCURED != true ; Build the thing - ExecDos::exec `"$NSIS" /O"$EXEDIR\bin\PortableAppsCompilerLog.txt" /DPACKAGE="$PACKAGE" /DNamePortable="$Name" /DAppID="$AppID" /DVersion="$1"$2 "$EXEDIR\etc\source\PortableAppsCompiler.nsi"` "" "" + ExecDos::exec `"$NSIS" /O"$EXEDIR\bin\WrapperCompilerLog.txt" /DPACKAGE="$PACKAGE" /DNamePortable="$Name" /DAppID="$AppID" /DVersion="${PACVER}"$2 "$EXEDIR\etc\source\PortableAppsCompiler.nsi"` "" "" Pop $R1 ${If} $R1 <> 0 StrCpy $ERROROCCURED true @@ -943,7 +1282,7 @@ Section Main SetDetailsPrint ListOnly DetailPrint " " - DetailPrint "Processing complete." + DetailPrint "Process Complete." ${If} ${FileExists} $PACKAGE\$AppID.exe StrCpy $FINISHTITLE "Wrapper Created" StrCpy $FINISHTEXT "The wrapper has been created. Wrapper location:\r\n$PACKAGE\r\n\r\nWrapper name:\r\n$AppID.exe" diff --git a/etc/source/CompilerWizardForm.ini b/etc/source/WrapperCompilerForm.ini similarity index 84% rename from etc/source/CompilerWizardForm.ini rename to etc/source/WrapperCompilerForm.ini index acb2444..4558024 100644 --- a/etc/source/CompilerWizardForm.ini +++ b/etc/source/WrapperCompilerForm.ini @@ -7,7 +7,7 @@ Left=0 Top=0 Right=296 Bottom=8 -Text=Create Launcher For: +Text=Create Wrapper For: [Field 2] Type=DirRequest diff --git a/etc/source/daemon.devin.p12 b/etc/source/daemon.devin.p12 deleted file mode 100644 index 7ceb12847c74a92fb4f46cfba7df7da77319dc84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2573 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