I have create a launcher to make my xilisoft video converter become portable, it success copy the registry file needed, but when i execute the launcher, my Xilisoft video converter won't startup. It's just execute the videoenc.exe after that it's automatically close it. Is anyone can help me please...
(this is my email, D4rk_SouL86(at)yahoo(dot)com)
This is the template, is there anything wrong with it?
; ************************************************************************** ; Name: Xilisoft Video Converter Portable v3.1.49 ; ************************************************************************** !define AUTHOR "Dark Soul" !define APP "Xilisoft" !define VER "3.1.49.0" !define EXE "videoenc.exe" !define PNAME "${App}Portable" !define ICON "${PNAME}.ico" !define REGKEYS "HKEY_LOCAL_MACHINE\SOFTWARE\RealDSF||HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Xilisoft Video Converter||HKEY_LOCAL_MACHINE\SOFTWARE\Apple Computer, Inc.||HKEY_CURRENT_USER\Software\Xilisoft||HKEY_CLASSES_ROOT\CLSID\{E21BE468-5C18-43EB-B0CC-DB93A847D769}||HKEY_CLASSES_ROOT\CLSID\{941A4793-A705-4312-8DFC-C11CA05F397E}||HKEY_CLASSES_ROOT\CLSID\{765035B3-5944-4A94-806B-20EE3415F26F}||HKEY_CLASSES_ROOT\CLSID\{238D0F23-5DC9-45A6-9BE2-666160C324DD}" !define INI "${PNAME}.ini" ; ************************************************************************** !include "Registry.nsh" !include "WordFunc.nsh" !insertmacro "WordFind" !include "FileFunc.nsh" !insertmacro "GetParameters" ; ************************************************************************** CRCCheck On WindowIcon Off SilentInstall Silent AutoCloseWindow True ; ************************************************************************** Var ACTION Var ACTIONDIRECTORY Var ACTIONPARAMETERS Var SPLASHSCREEN Var PROGRAMEXE Var PROGRAMDIR Var PROGRAMPARMS Var DATADIR Var INIFILE Var SECONDLAUNCH ; ************************************************************************** Name "${APP} Portable" !ifdef ICON Icon "${ICON}" !endif Caption "${APP} Portable - ${VER}" OutFile "Xilisoft Video Converter Portable v3.1.49.exe" ; ************************************************************************** LoadLanguageFile "${NSISDIR}\Contrib\Language files\English.nlf" VIProductVersion "${Ver}" VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "Xilisoft Video Converter Portable v3.1.49" VIAddVersionKey /LANG=${LANG_ENGLISH} "Comments" "Allow Video Converter to be run from a removeable drive." VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "© ${AUTHOR}" VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "by ${AUTHOR}" VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "Xilisoft Video Converter Portable v3.1.49" VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${VER}" VIAddVersionKey /LANG=${LANG_ENGLISH} "OriginalFilename" "${PNAME}.exe" ; ************************************************************************** Function Init FunctionEnd ; ************************************************************************** Function CleanUp FunctionEnd ; ************************************************************************** Function InitVariables ; -------------------------------------------------------------------------- ; Check whether an INI file exists, set variable pointing to it ; -------------------------------------------------------------------------- IfFileExists "$EXEDIR\${INI}" "" CheckPortableINI StrCpy "$INIFILE" "$EXEDIR\${INI}" Goto ReadINIFile CheckPortableINI: IfFileExists "$EXEDIR\${PNAME}\${INI}" "" CheckPortableAppsINI StrCpy "$INIFILE" "$EXEDIR\${PNAME}\${INI}" Goto ReadINIFile CheckPortableAppsINI: IfFileExists "$EXEDIR\PortableApps\${PNAME}\${INI}" "" CheckAppsINI StrCpy "$INIFILE" "$EXEDIR\PortableApps\${PNAME}\${INI}" Goto ReadINIFile CheckAppsINI: IfFileExists "$EXEDIR\Apps\${PNAME}\${INI}" "" CheckDataINI StrCpy "$INIFILE" "$EXEDIR\Apps\${PNAME}\${INI}" Goto ReadINIFile CheckDataINI: IfFileExists "$EXEDIR\Data\${PNAME}\${INI}" "" NoINIFile StrCpy "$INIFILE" "$EXEDIR\Data\${PNAME}\${INI}" Goto ReadINIFile Goto NoINIFile ; -------------------------------------------------------------------------- ; Read content of the INI file ; -------------------------------------------------------------------------- ReadINIFile: ReadINIStr $0 "$INIFILE" "${PNAME}" "ProgramDirectory" StrCmp $0 "" NoINIFile ; if emtpy retrieve correct setting StrCpy "$PROGRAMDIR" "$EXEDIR\$0" ReadINIStr $0 "$INIFILE" "${PNAME}" "DataDirectory" StrCmp $0 "" NoINIFile ; if empty retrieve correct setting StrCpy "$DATADIR" "$EXEDIR\$0" ReadINIStr $0 "$INIFILE" "${PNAME}" "ProgramExecutable" StrCpy "$PROGRAMEXE" "$0" StrCmp $0 "" "" Splash StrCpy "$PROGRAMEXE" "${EXE}" Splash: ReadINIStr $0 "$INIFILE" "${PNAME}" "SplashScreen" StrCpy "$SPLASHSCREEN" "$0" StrCmp "$SPLASHSCREEN" "" "" ProgramParameters StrCpy "$SPLASHSCREEN" "enabled" ProgramParameters: ReadINIStr $0 "$INIFILE" "${PNAME}" "ProgramParameters" StrCpy "$PROGRAMPARMS" "$0" Goto InitVarEnd NoINIFile: ; -------------------------------------------------------------------------- ; Set default values for variables ; -------------------------------------------------------------------------- StrCpy "$PROGRAMEXE" "${EXE}" StrCpy "$PROGRAMPARMS" "" StrCpy "$SPLASHSCREEN" "enabled" ; -------------------------------------------------------------------------- ; Check which directory configuration is used and set variables accordingly ; -------------------------------------------------------------------------- IfFileExists "$EXEDIR\App\${APP}\$PROGRAMEXE" "" CheckPortableDIR StrCpy "$PROGRAMDIR" "$EXEDIR\App\${APP}" StrCpy "$DATADIR" "$EXEDIR\Data" Goto InitVarEnd CheckPortableDIR: IfFileExists "$EXEDIR\${PNAME}\App\${APP}\$PROGRAMEXE" "" CheckPortableAppsDIR StrCpy "$PROGRAMDIR" "$EXEDIR\${PNAME}\App\${APP}" StrCpy "$DATADIR" "$EXEDIR\${PNAME}\Data" Goto InitVarEnd CheckPortableAppsDIR: IfFileExists "$EXEDIR\PortableApps\${PNAME}\App\${APP}\$PROGRAMEXE" "" CheckAppsDIR StrCpy "$PROGRAMDIR" "$EXEDIR\PortableApps\${PNAME}\App\${APP}" StrCpy "$DATADIR" "$EXEDIR\PortableApps\${PNAME}\Data" Goto InitVarEnd CheckAppsDIR: IfFileExists "$EXEDIR\Apps\${PNAME}\${APP}\$PROGRAMEXE" "" NoDIR StrCpy "$PROGRAMDIR" "$EXEDIR\Apps\${PNAME}\${APP}" StrCpy "$DATADIR" "$EXEDIR\Data\${PNAME}" Goto InitVarEnd NoDIR: ; -------------------------------------------------------------------------- ; No allowed pathconfiguration was found ; -------------------------------------------------------------------------- MessageBox MB_OK|MB_ICONEXCLAMATION `$PROGRAMEXE was not found. Please check your configuration` Abort InitVarEnd: FunctionEnd ; ************************************************************************** Function DoAction StrCmp "$ACTIONPARAMETERS" "" AfterLoop StrCpy "$R8" "0" ; reset counter StrCpy "$R2" "$ACTION" 6 # StrCmp "$R2" "Backup" "" GoOn IfFileExists "$ACTIONDIRECTORY\*.*" GoOn CreateDirectory $ACTIONDIRECTORY GoOn: StrCpy "$R0" "$ACTIONPARAMETERS" Loop: ; -------------------------------------------------------------------------- ; Get single parameter out of list ; -------------------------------------------------------------------------- StrCmp "$R0" "" AfterLoop IntOp $R8 $R8 + 1 ${WordFind} "$R0" "||" "+01" $R9 ${WordFind} "$R0" "||" "+02*}" $R0 StrCmp "$R0" "$R9" LastLoop Goto DoWork LastLoop: StrCpy "$R0" "" ; -------------------------------------------------------------------------- ;Decide what to do with parameter ; -------------------------------------------------------------------------- DoWork: StrCpy "$R2" "$ACTION" "" -4 # !ifdef REGKEYS StrCmp "$R2" "Keys" DoWorkRegistry !endif !ifdef SETTINGSFILES StrCmp "$R2" "File" DoWorkFiles !endif !ifdef SETTINGSDIRS StrCmp "$R2" "Dirs" DoWorkDirectory !endif Goto Continue ; -------------------------------------------------------------------------- ; Do action on registry keys ; -------------------------------------------------------------------------- !ifdef REGKEYS DoWorkRegistry: StrCmp "$ACTION" "BackupKeys" BackupRegistryKey StrCmp "$ACTION" "RestoreKeys" RestoreRegistryKey StrCmp "$ACTION" "DeleteKeys" DeleteRegistryKey Goto Continue BackupRegistryKey: ${registry::KeyExists} "$R9" $R7 StrCmp "$R7" "0" 0 Continue ${registry::SaveKey} "$R9" "$ACTIONDIRECTORY\RegKey$R8.reg" "/G=1" $R7 Sleep 50 Goto Continue RestoreRegistryKey: IfFileExists "$ACTIONDIRECTORY\RegKey$R8.reg" 0 Continue ${registry::RestoreKey} "$ACTIONDIRECTORY\RegKey$R8.reg" $R7 Sleep 50 Goto Continue DeleteRegistryKey: ${registry::DeleteKey} "$R9" $R7 Sleep 50 Goto Continue !endif ; -------------------------------------------------------------------------- ; Do action on files ; -------------------------------------------------------------------------- !ifdef SETTINGSFILES DoWorkFiles: StrCmp "$ACTION" "BackupFile" BackupFile StrCmp "$ACTION" "RestoreFile" RestoreFile StrCmp "$ACTION" "DeleteFile" DeleteFile BackupFile: IfFileExists "$R9" 0 Continue CopyFiles "$R9" "$ACTIONDIRECTORY\File$R8.dat" Goto Continue RestoreFile: IfFileExists "$ACTIONDIRECTORY\File$R8.dat" 0 Continue CopyFiles "$ACTIONDIRECTORY\File$R8.dat" "$R9" Goto Continue DeleteFile: Delete "$R9" Goto Continue !endif ; -------------------------------------------------------------------------- ; Do action on directories ; -------------------------------------------------------------------------- !ifdef SETTINGSDIRS DoWorkDirectory: StrCmp "$ACTION" "BackupDirs" BackupDirectory StrCmp "$ACTION" "RestoreDirs" RestoreDirectory StrCmp "$ACTION" "DeleteDirs" DeleteDirectory BackupDirectory: IfFileExists "$R9\*.*" 0 Continue IfFileExists "$ACTIONDIRECTORY\Dir$R8.dat" +2 0 CreateDirectory "$ACTIONDIRECTORY\Dir$R8.dat" CopyFiles "$R9\*.*" "$ACTIONDIRECTORY\Dir$R8.dat" Goto Continue RestoreDirectory: IfFileExists "$ACTIONDIRECTORY\Dir$R8.dat\*.*" 0 Continue IfFileExists "$R9\*.*" +2 0 CreateDirectory "$R9" CopyFiles "$ACTIONDIRECTORY\Dir$R8.dat\*.*" "$R9" Goto Continue DeleteDirectory: RMDir "/r" "$R9" Goto Continue !endif ; -------------------------------------------------------------------------- ; End of Loop ; -------------------------------------------------------------------------- Continue: Goto Loop AfterLoop: FunctionEnd ; ************************************************************************** Function CheckEXE IfFileExists "$PROGRAMDIR\$PROGRAMEXE" FoundEXE MessageBox MB_OK|MB_ICONEXCLAMATION `$PROGRAMEXE was not found. Please check your configuration!` Abort FoundEXE: FindProcDLL::FindProc "$PROGRAMEXE" StrCmp $R0 "1" "" EndEXE StrCpy $SECONDLAUNCH "true" EndEXE: FunctionEnd ; ************************************************************************** Section "Main" ; -------------------------------------------------------------------------- ; Initialize variables, read INI etc. ; -------------------------------------------------------------------------- Call InitVariables ; -------------------------------------------------------------------------- ; Do some EXE checking ; -------------------------------------------------------------------------- Call CheckEXE ; -------------------------------------------------------------------------- ; Display Splashscreen when available ; -------------------------------------------------------------------------- !ifdef SPLASHIMAGE StrCmp "$SPLASHSCREEN" "enabled" 0 NoSplash InitPluginsDir File /oname=$PLUGINSDIR\splash.jpg "${SPLASHIMAGE}" newadvsplash::show /NOUNLOAD 2500 200 200 -1 /L $PLUGINSDIR\splash.jpg NoSplash: !endif StrCmp $SECONDLAUNCH "true" SimplyStartProgram ; -------------------------------------------------------------------------- ; Backup existing, replace with saved registry keys ; -------------------------------------------------------------------------- !ifdef REGKEYS StrCpy "$ACTIONPARAMETERS" "${REGKEYS}" StrCpy "$ACTIONDIRECTORY" "$DATADIR\RegistryBackup" StrCpy "$ACTION" "BackupKeys" Call DoAction ; StrCpy "$ACTION" "DeleteKeys" ; Call DoAction StrCpy "$ACTIONDIRECTORY" "$DATADIR\Registry" StrCpy "$ACTION" "RestoreKeys" Call DoAction !endif ; -------------------------------------------------------------------------- ; Backup existing, replace with saved settings files ; -------------------------------------------------------------------------- !ifdef SETTINGSFILES StrCpy "$ACTIONPARAMETERS" "${SETTINGSFILES}" StrCpy "$ACTIONDIRECTORY" "$DATADIR\SettingsBackup" StrCpy "$ACTION" "BackupFile" Call DoAction StrCpy "$ACTIONDIRECTORY" "$DATADIR\Settings" StrCpy "$ACTION" "RestoreFile" Call DoAction !endif ; -------------------------------------------------------------------------- ; Backup existing settings directories ; -------------------------------------------------------------------------- !ifdef SETTINGSDIRS StrCpy "$ACTIONPARAMETERS" "${SETTINGSDIRS}" StrCpy "$ACTIONDIRECTORY" "$DATADIR\SettingsBackup" StrCpy "$ACTION" "BackupDirs" Call DoAction StrCpy "$ACTIONDIRECTORY" "$DATADIR\Settings" StrCpy "$ACTION" "RestoreDirs" Call DoAction !endif Call Init ; -------------------------------------------------------------------------- ; Start program ; -------------------------------------------------------------------------- ${GetParameters} $R0 ExecWait "$PROGRAMDIR\$PROGRAMEXE $PROGRAMPARMS $R0" Call CleanUp ; -------------------------------------------------------------------------- ; backup and restore or clean up settings directories ; -------------------------------------------------------------------------- !ifdef SETTINGSDIRS StrCpy "$ACTIONPARAMETERS" "${SETTINGSDIRS}" StrCpy "$ACTIONDIRECTORY" "$DATADIR\Settings" StrCpy "$ACTION" "BackupDirs" Call DoAction StrCpy "$ACTION" "DeleteDirs" Call DoAction StrCpy "$ACTIONDIRECTORY" "$DATADIR\SettingsBackup" StrCpy "$ACTION" "RestoreDirs" Call DoAction !endif ; -------------------------------------------------------------------------- ; backup and restore or clean up settings files ; -------------------------------------------------------------------------- !ifdef SETTINGSFILES StrCpy "$ACTIONPARAMETERS" "${SETTINGSFILES}" StrCpy "$ACTIONDIRECTORY" "$DATADIR\Settings" StrCpy "$ACTION" "BackupFile" Call DoAction StrCpy "$ACTION" "DeleteFile" Call DoAction StrCpy "$ACTIONDIRECTORY" "$DATADIR\SettingsBackup" StrCpy "$ACTION" "RestoreFile" Call DoAction !endif ; -------------------------------------------------------------------------- ; backup and restore or clean up registry keys ; -------------------------------------------------------------------------- !ifdef REGKEYS StrCpy "$ACTIONPARAMETERS" "${REGKEYS}" StrCpy "$ACTIONDIRECTORY" "$DATADIR\Registry" StrCpy "$ACTION" "BackupKeys" Call DoAction StrCpy "$ACTION" "DeleteKeys" Call DoAction sleep 500 StrCpy "$ACTIONDIRECTORY" "$DATADIR\RegistryBackup" StrCpy "$ACTION" "RestoreKeys" Call DoAction sleep 1000 !endif ${registry::Unload} ; -------------------------------------------------------------------------- ; remove saved backups ; -------------------------------------------------------------------------- RMDir "/r" "$DATADIR\SettingsBackup" RMDir "/r" "$DATADIR\RegistryBackup" Goto EndOfCode ; -------------------------------------------------------------------------- ; run application directly without doing anything else, as it is already running ; -------------------------------------------------------------------------- SimplyStartProgram: ${GetParameters} $R0 Exec "$PROGRAMDIR\$PROGRAMEXE $PROGRAMPARMS $R0" ${registry::Unload} EndOfCode: SectionEnd
[Double post deleted, pre tags added and email hidden by moderator SL]
well i didn't really trace through your code but assuming you have everything right then a common reason for it not launching right would be that for some apps you need to add
SetOutPath "$PROGRAMDIR"
before your Exec line to set it's working directory
Thank's so much, it was work on my launcher
Dark Soul: welcome to PortableApps.com!
It's good to see more people working on more portable apps, but requests about these sorts of things should really go in the Portable App Development forum. Could you (or a moderator) please move it there?
And once again, welcome to the PortableApps.com community.
I am a Christian and a developer and moderator here.
“A soft answer turns away wrath, but a harsh word stirs up anger.” – Proverbs 15:1