论坛首页
论坛首页 开发者论坛 PortableApps开发 关于launcher各个部分的执行顺序的问题

关于launcher各个部分的执行顺序的问题

讨论关于便携软件开发的技术与问题,包括PAL、NSIS、VMware ThinApp及其他。
paulhybryant 头像
分舵香主
分舵香主

帖子: 56
在文档里没有看到比较详细的解释

如果有一个程序叫App,在注册表中已经存在HKCU\Software\App
如果用
[RegistryKeys]
-=HKCU\Software\App
备份和
[RegistryCleanupForce]
1=HKCU\Software\App
来清理
是不是HKCU\Software\App先被删除,然后备份了的key被恢复?

还有,custom.nsh和launcher.ini里面的这些操作谁先执行(如果两个文件里面都有清理的操作)
有没有详细一点的执行流程?
谢谢

David Pi 头像
建寨老工
建寨老工

帖子: 213

其实了解PAL最好的办法就是看它的源代码,可能看半天文档不明白,看看源代码就懂了。

Other\Source\PortableApps.comLauncher.nsi:

代码: 全选
Function .onInit           ;{{{1
   ${RunSegment} Custom
   ${RunSegment} Core
   ${RunSegment} Temp
   ${RunSegment} Language
   ${RunSegment} OperatingSystem
   ${RunSegment} RunAsAdmin
FunctionEnd

Function Init              ;{{{1
   ${RunSegment} Custom
   ${RunSegment} Core
   ${RunSegment} Settings
   ${RunSegment} DriveLetter
   ${RunSegment} DirectoryMoving
   ${RunSegment} Variables
   ${RunSegment} Language
   ${RunSegment} Registry
   ${RunSegment} Java
   ${RunSegment} DotNet
   ${RunSegment} Ghostscript
   ${RunSegment} RunLocally
   ${RunSegment} Temp
   ${RunSegment} InstanceManagement
   ${RunSegment} SplashScreen
   ${RunSegment} RefreshShellIcons
FunctionEnd

Function Pre               ;{{{1
   ${RunSegment} Custom
   ${RunSegment} RunLocally
   ${RunSegment} Temp
   ${RunSegment} LastRunEnvironment
   ${RunSegment} Environment
   ${RunSegment} ExecString
FunctionEnd

Function PrePrimary        ;{{{1
   ${RunSegment} Custom
   ${RunSegment} DriveLetter
   ${RunSegment} DirectoryMoving
   ${RunSegment} LastRunEnvironment
   ${RunSegment} FileWrite
   ${RunSegment} FilesMove
   ${RunSegment} DirectoriesMove
   ;${RunSegment} RegisterDLL
   ${RunSegment} RegistryKeys
   ${RunSegment} RegistryValueBackupDelete
   ${RunSegment} RegistryValueWrite
   ${RunSegment} Services
FunctionEnd

Function PreSecondary      ;{{{1
   ${RunSegment} Custom
   ;${RunSegment} *
FunctionEnd

Function PreExec           ;{{{1
   ${RunSegment} Custom
   ${RunSegment} RefreshShellIcons
   ${RunSegment} WorkingDirectory
   ${RunSegment} RunBeforeAfter
FunctionEnd

Function PreExecPrimary    ;{{{1
   ${RunSegment} Custom
   ${RunSegment} Core
   ${RunSegment} LastRunEnvironment
   ${RunSegment} SplashScreen
FunctionEnd

Function PreExecSecondary  ;{{{1
   ${RunSegment} Custom
   ;${RunSegment} *
FunctionEnd

Function Execute           ;{{{1
。。。。。。
FunctionEnd

Function PostExecPrimary   ;{{{1
   ${RunSegment} Custom
FunctionEnd

Function PostExecSecondary ;{{{1
   ${RunSegment} Custom
FunctionEnd

Function PostExec          ;{{{1
   ${RunSegment} RunBeforeAfter
   ${RunSegment} Custom
FunctionEnd

Function PostPrimary       ;{{{1
   ${RunSegment} Services
   ${RunSegment} RegistryValueBackupDelete
   ${RunSegment} RegistryKeys
   ${RunSegment} RegistryCleanup
   ;${RunSegment} RegisterDLL
   ${RunSegment} Qt
   ${RunSegment} DirectoriesMove
   ${RunSegment} FilesMove
   ${RunSegment} DirectoriesCleanup
   ${RunSegment} RunLocally
   ${RunSegment} Temp
   ${RunSegment} Custom
FunctionEnd

Function PostSecondary     ;{{{1
   ;${RunSegment} *
   ${RunSegment} Custom
FunctionEnd

Function Post              ;{{{1
   ${RunSegment} Ghostscript
   ${RunSegment} RefreshShellIcons
   ${RunSegment} Custom
FunctionEnd

Function Unload            ;{{{1
   ${RunSegment} XML
   ${RunSegment} Registry
   ${RunSegment} SplashScreen
   ${RunSegment} Core
   ${RunSegment} Custom
FunctionEnd


这就是各个Segment的执行顺序。

仅仅要备份还原一个注册表键的话只需要用[RegistryKeys]:-=HKCU\Software\App 就可以了。[RegistryCleanupForce]的意思是将系统内本来存在的这个键值删除掉,一般不需要用到。

paulhybryant 头像
分舵香主
分舵香主

帖子: 56
原来源代码在这里,谢谢,David!


回到 PortableApps开发