NSIS求助

讨论关于便携软件开发的技术与问题,包括PAL、NSIS、VMware ThinApp及其他。
帖子 2012-06-30 11:44
ko68888 投名入寨
投名入寨

帖子: 6
我在我的单文件firefox版本中需要将pac代理脚本写入prefs.js中,而pac的路径带了环境变量,我单文件是解压到temp目录的,$0代表firefox路径
pac在prefs.js中的路径应该是正斜杠,但$0带的路径是反斜杠,这个问题也不知如何解决
网上查了filewrite的用法,但编译时,进行到下面第2行就中断了,想来语句有问题,请D大帮帮忙
FileOpen $1 $0\profile\prefs.js w
FileWrite $1 "user_pref("network.proxy.autoconfig_url", "file://$0/profile/autoproxy.pac");"
FileClose $1

简单来说:请问如何用nsis在prefs.js中写入pac语句,且PAC文件路径含有反斜杠

帖子 2012-06-30 11:47
ko68888 投名入寨
投名入寨

帖子: 6
单文件版本在http://code.google.com/p/litefox/downloads/detail?name=Litefox13.0.1%280623%29.exe
nsi脚本
代码: 全选
!define /date UNIQUE_FOLDER "%H%M%S"
!define ENG 1033
!define CHS 2052
!define MUI_EXTRACTING_TEXT "$(EXTRACTING)"
!define MUI_RECOVERING_TEXT "$(RECOVERING)"
!define MUI_SAVING_TEXT "$(SAVING)"
LangString EXTRACTING ${ENG} "Extracting Litefox to TEMP directory..."
LangString EXTRACTING ${CHS} "正在释放主程序,请稍侯..."
LangString RECOVERING ${ENG} "Profile.rar found,Now recovering profile..."
LangString RECOVERING ${CHS} "正在解压profile.rar到配置目录..."
LangString SAVING ${ENG} "Saving profile as profile.rar,please wait..."
LangString SAVING ${CHS} "正在保存配置文件,请稍侯..."
SetCompressor /SOLID lzma
SetCompressorDictSize 16
SetDatablockOptimize on
OutFile "Litefox13.0.2(0630).exe"
Icon "Firefox.ico"
VIProductVersion "2012.06.30.0"
VIAddVersionKey "ProductName" "Mozilla Firefox Browser"
VIAddVersionKey "Comments" "Slim,fast &functional!"
VIAddVersionKey "CompanyName" "Mozilla Corporation"
VIAddVersionKey "LegalTrademarks" "Combined by Aspirant"
VIAddVersionKey "LegalCopyright" "Scripts Copyright reserved by original authors."
VIAddVersionKey "FileDescription" "Make Firefox lightweight and functional with only one executable file!"
VIAddVersionKey "FileVersion" "tete009 13.0.2"
SilentInstall silent
Section
InitPluginsDir
Banner::show /NOUNLOAD "$(EXTRACTING)"
Banner::getWindow
StrCpy $0 "$TEMP\LiteFox@${UNIQUE_FOLDER}"
SetOutPath $0
File /r "Myfox\*"
Banner::destroy
IfFileExists "$EXEDIR\profile.rar" +1 +3
Banner::show /NOUNLOAD "$(RECOVERING)"
Banner::getWindow
CreateDirectory "$0\profile"
nsExec::Exec '"$0\rar.exe" x -ac -oc -u -x*.mfl -x*.dat -x*\*cache* -x*\*bak* -x*\*bookmarkbackups* -x*.bak -xpatterns-*.ini -y "$EXEDIR\profile.rar" "$0\profile\"'
Banner::destroy
FileOpen $1 $0\profile\prefs.js w
FileWrite $1 "user_pref("network.proxy.autoconfig_url", "file://$0/profile/autoproxy.pac");"
FileClose $1
ExecWait '"$0\Firefox.exe" -profile "$0\profile" -no-remote'
Banner::show /NOUNLOAD "$(SAVING)"
Banner::getWindow
nsExec::Exec '"$0\rar.exe" m -ac -dw -u -as -x*.mfl -x*.dat -x*\*cache* -x*\*bak* -x*\*bookmarkbackups* -x*.bak -xpatterns-*.ini -m5 -idq -o+ -r -ed -ep1 "$EXEDIR\profile.rar" "$0\profile\"'
SetOutPath $TEMP
RMDIR /REBOOTOK /r "$0"
Banner::destroy
SectionEnd

自动调用rar.exe保存配置文件

帖子 2012-06-30 20:40
David Pi 头像
建寨老工
建寨老工

帖子: 213

编译不成功是引号的问题。两对双引号不能嵌套,必须把其中一对改成单引号。

斜杠的正负可以通过 ${WordReplace} 这个宏来改变。

综上, 首先在文件头部,Section 以上引入:
代码: 全选
!include WordFunc.nsh


FileWrite 那一段应该写成:
代码: 全选
${WordReplace} $0 \ / + $R0
FileOpen $1 $0\profile\prefs.js w
FileWrite $1 'user_pref("network.proxy.autoconfig_url", "file://$R0/profile/autoproxy.pac");'
FileClose $1


不过要注意,w 参数的 FileOpen 会把整个 prefs.js 清空。如果要保留 prefs.js 中本来的内容,可以参考 Firefox Portable 的作法,把配置写到文件末尾去:
代码: 全选
      ;=== Be sure the default browser check is disabled
      FileOpen $0 "$PROFILEDIRECTORY\prefs.js" a
      FileSeek $0 0 END
      FileWriteByte $0 "13"
      FileWriteByte $0 "10"
      FileWrite $0 `user_pref("browser.shell.checkDefaultBrowser", false);`
      FileWriteByte $0 "13"
      FileWriteByte $0 "10"
      StrCmp "$LOCALHOMEPAGE" "" FixPrefsJsClose
      FileWrite $0 `user_pref("browser.startup.homepage", "file:///$EXEDIR/$LOCALHOMEPAGE");`
      FileWriteByte $0 "13"
      FileWriteByte $0 "10"

帖子 2012-07-02 15:21
ko68888 投名入寨
投名入寨

帖子: 6
感谢D大,昨天论坛维护,所以没有及时回复,谢谢您


回到 PortableApps开发

cron