论坛首页
论坛首页 开发者论坛 PortableApps开发 再问个比较菜的问题,关于Custom.nsh

再问个比较菜的问题,关于Custom.nsh

讨论关于便携软件开发的技术与问题,包括PAL、NSIS、VMware ThinApp及其他。
pbphoo 红心可鉴
红心可鉴

帖子: 53
最近因为“百度影音1.0.27.140便携版”这个软件,因而在处理软件便携时对Custom.nsh很感兴趣,感觉使用他的话会很方便,尤其是处理诸如dll、ax等文件的注册很方便,并且如果碰到注册表也是一样的方便处理(使用reg2nsis),关于前面提到的“dll、ax等文件的注册”我没有疑问,因为Custom.nsh中间有这样写:
代码: 全选
${SegmentPreExecPrimary}
   ExecWait 'regsvr32 /s "$PROGRAMDIR\codecs\ts.dll"'
!macroend

${SegmentPostPrimary}
   ExecWait 'regsvr32 /s /u "$PROGRAMDIR\Xbdyy.dll"'
!macroend


而关于对注册表的处理我就比较疑惑了,因为只写了
代码: 全选
${SegmentPreExecPrimary}
   WriteRegStr HKEY_CURRENT_USER "SOFTWARE\Classes\.3gp" "" "BaiduPlayer.3gp"
!macroend


现在想问的就是在Custom.nsh中写到的注册表内容在便携软件结束后有没有被去掉,我自己实验的结果好像有时便携,有时不然,所以来问问大家?
另外如果没有被去掉的话,应该怎么办??

jooseng 革命同志
革命同志

帖子: 3560
pbphoo 写道:
最近因为“百度影音1.0.27.140便携版”这个软件,因而在处理软件便携时对Custom.nsh很感兴趣,感觉使用他的话会很方便,尤其是处理诸如dll、ax等文件的注册很方便,并且如果碰到注册表也是一样的方便处理(使用reg2nsis),关于前面提到的“dll、ax等文件的注册”我没有疑问,因为Custom.nsh中间有这样写:
代码: 全选
${SegmentPreExecPrimary}
   ExecWait 'regsvr32 /s "$PROGRAMDIR\codecs\ts.dll"'
!macroend

${SegmentPostPrimary}
   ExecWait 'regsvr32 /s /u "$PROGRAMDIR\Xbdyy.dll"'
!macroend


而关于对注册表的处理我就比较疑惑了,因为只写了
代码: 全选
${SegmentPreExecPrimary}
   WriteRegStr HKEY_CURRENT_USER "SOFTWARE\Classes\.3gp" "" "BaiduPlayer.3gp"
!macroend


现在想问的就是在Custom.nsh中写到的注册表内容在便携软件结束后有没有被去掉,我自己实验的结果好像有时便携,有时不然,所以来问问大家?
另外如果没有被去掉的话,应该怎么办??

处理注册表键/值没必要用Custom code。
如要用,去读NSIS手册。

pbphoo 红心可鉴
红心可鉴

帖子: 53
jooseng,正如我前文说的那样,用用Custom code处理注册表的话会很方便,免去大量繁琐重复无趣的手动处理(用reg2nsis),所以我认为这是一个方法,可能使便携软件制作更简单的方法,更便于普通人去制作便携软件,我始终认为:越简单,越美好!
另外,能不能告诉我正对我上面提出的问题有没有解决之道,因为英文较菜,nsis手册也看了几天,结果发现根本没看懂,越是我不明白的地方,我越是看的迷糊……

jooseng 革命同志
革命同志

帖子: 3560
pbphoo 写道:
jooseng,正如我前文说的那样,用用Custom code处理注册表的话会很方便,免去大量繁琐重复无趣的手动处理(用reg2nsis),所以我认为这是一个方法,可能使便携软件制作更简单的方法,更便于普通人去制作便携软件,我始终认为:越简单,越美好!
另外,能不能告诉我正对我上面提出的问题有没有解决之道,因为英文较菜,nsis手册也看了几天,结果发现根本没看懂,越是我不明白的地方,我越是看的迷糊……

Portableapps.com 开发PAL就是要让我等不会编程的人也能制作便携软件。写Custom code (也就是写NSIS 程序)会更容易/简单/方便?

Custom code:
-----------------------------------------------
${SegmentPreExecPrimary}
registry::_DeleteKey /NOUNLOAD "HKEY_CURRENT_USER\SOFTWARE\Classes\.3gp-BackupByBaiduPlayerPortable"
registry::_MoveKey /NOUNLOAD "HKEY_CURRENT_USER\SOFTWARE\Classes\.3gp" "HKEY_CURRENT_USER\SOFTWARE\Classes\.3gp-BackupByBaiduPlayerPortable"
WriteRegStr HKEY_CURRENT_USER "SOFTWARE\Classes\.3gp" "" "BaiduPlayer.3gp"
!macroend

${SegmentPostPrimary}
registry::_SaveKey /NOUNLOAD "HKEY_CURRENT_USER\SOFTWARE\Classes\.3gp" "$EXEDIR\Data\BaiduPlayer000.reg" "/U=1 /A=1" ;如果不想导出,这行可免。
registry::_DeleteKey /NOUNLOAD "HKEY_CURRENT_USER\SOFTWARE\Classes\.3gp"
registry::_MoveKey /NOUNLOAD "HKEY_CURRENT_USER\SOFTWARE\Classes\.3gp-BackupByBaiduPlayerPortable" "HKEY_CURRENT_USER\SOFTWARE\Classes\.3gp"
!macroend
-----------------------------------------------

写 PAL ini 只须两行:

-----------------------------------------------
[RegistryKeys]
BaiduPlayer000=HKCU\Software\Classes\.3gp

[RegistryValueWrite]
HKCU\Software\Classes\.3gp\=REG_SZ:BaiduPlayer.3gp
-----------------------------------------------

你说那一个更容易/简单/方便?

pbphoo 红心可鉴
红心可鉴

帖子: 53
不争这个了,这个问题只能说是仁者见仁,智者见智了……对我遇到的问题jooseng你有没有什么好办法呢?

jooseng 革命同志
革命同志

帖子: 3560
pbphoo 写道:
不争这个了,这个问题只能说是仁者见仁,智者见智了……对我遇到的问题jooseng你有没有什么好办法呢?

上一个回复不是给你写了? :o

pbphoo 红心可鉴
红心可鉴

帖子: 53
实在不好意思,因为这几天都在火车上,回复的有点晚了……

代码: 全选
${SegmentPreExecPrimary}
   WriteRegStr HKEY_CURRENT_USER "SOFTWARE\Classes\.3gp" "" "BaiduPlayer.3gp"
!macroend


代码: 全选
${SegmentPostPrimary}
registry::_SaveKey /NOUNLOAD "HKEY_CURRENT_USER\SOFTWARE\Classes\.3gp" "$EXEDIR\Data\BaiduPlayer000.reg" "/U=1 /A=1" ;如果不想导出,这行可免。
registry::_DeleteKey /NOUNLOAD "HKEY_CURRENT_USER\SOFTWARE\Classes\.3gp"
registry::_MoveKey /NOUNLOAD "HKEY_CURRENT_USER\SOFTWARE\Classes\.3gp-BackupByBaiduPlayerPortable" "HKEY_CURRENT_USER\SOFTWARE\Classes\.3gp"
!macroend


这样写是有点复杂了


回到 PortableApps开发

cron