论坛风格切换切换到宽版
  • 83260阅读
  • 218回复

【原创】NSIS安装制作基础教程[初级篇] + NSIS 简体 [复制链接]

上一主题 下一主题
离线restools

发帖
2848
金钱
1430
威望
143
只看该作者 120 发表于: 2005-04-13
QUOTE(ah47sm @ 2005年04月13日 09时46分)
NSIS 脚本实例 -> 仅卸载安装的文件(原始创作由 Afrow UK)

QUOTE
Var UninstLog

; Add file macro
!macro File FileName
File "${FileName}"
FileWrite $UninstLog "$OUTDIR\${FileName}$\r$\n"
!macroend
!define File "!insertmacro File"

Section -openlogfile
FileOpen $UninstLog "$INSTDIR\uninstall.log" w
SectionEnd

Section "Install Main"

SetOutPath $INSTDIR
${File} "file1.ext"
${File} "file2.ext"
${File} "file3.ext"

SectionEnd

Section "Install Other"

SetOutPath "$INSTDIR\Other"
${File} "file4.ext"
${File} "file5.ext"
${File} "file6.ext"

SectionEnd

Section -closelogfile
FileClose $UninstLog
SectionEnd

Section Uninstall

; Can't uninstall if uninstall.log is missing!
IfFileExists "$EXEDIR\uninstall.log" +3
  MessageBox MB_OK|MB_ICONSTOP "uninstall.log not found!$\r$\n \
  Uninstallation cannot proceed!"
  Abort

Push $R0
FileOpen $UninstLog "$EXEDIR\uninstall.log" r

LoopRead:
  ClearErrors
  FileRead $UninstLog $R0
  IfErrors LoopDone

  Push $R0
    Call un.TrimNewLines
  Pop $R0
  Delete $R0

  Goto LoopRead
LoopDone:
FileClose $UninstLog
Pop $R0

SectionEnd


[snapback]204062[/snapback]


可惜对于我做向导没多大用,对于 *.* 的文件还有 子目录 的通用性不大,我正在构思一个通用性极强的的脚本,类似NSIS已经打开了 logset 参数一样(这个默认是不打开的,如果要用需要重新编译 makensis.exe 才可以打开使用这个参数) ,所以我要想一个更通用的方法,不用使用特别编译的 makensis.exe
我的BLOG:   http://restools.hanzify.org (Inno Setup 增强版, 插件 发布站点)
离线ah47sm
发帖
1774
金钱
0
威望
0
只看该作者 121 发表于: 2005-04-14
QUOTE
ActiveX Dll 组件注册(原始创作 KiCHiK):

;在 -Post 块里
Exec 'regsvr32.exe /s "$INSTDIR\${NAME_OF_MY_DLL}"'

;在 Uninstall 块里
Exec 'regsvr32.exe /s /u "$INSTDIR\${NAME_OF_MY_DLL}"'



QUOTE
添加一个共享的 DLL(原始创作 sunjammer):

; Increments a shared DLLs reference count.
; Use by passing one item on the stack (the full path of the DLL).
;
; 用法:
;  Push $SYSDIR\myDll.dll
;  Call AddSharedDLL
;

Function AddSharedDLL
  Exch $R1
  Push $R0
  ReadRegDword $R0 HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs
$R1
  IntOp $R0 $R0 + 1
  WriteRegDWORD HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1
$R0
  Pop $R0
  Pop $R1
FunctionEnd



QUOTE
Remove a shared DLL

; Usage:
;  Push $SYSDIR\myDll.dll
;  Call un.RemoveSharedDLL
;

Function un.RemoveSharedDLL
  Exch $R1
  Push $R0
  ReadRegDword $R0 HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs
$R1
  StrCmp $R0 "" remove
    IntOp $R0 $R0 - 1
    IntCmp $R0 0 rk rk uk
    rk:
      DeleteRegValue HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs
$R1
    goto remove
    uk:
      WriteRegDWORD HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs
$R1 $R0
    Goto noremove
  remove:
    Delete /REBOOTOK $R1
  noremove:
  Pop $R0
  Pop $R1
FunctionEnd



QUOTE
RegisterTLB - register Typelib:

Function RegisterTlb
  Exch $R0 ; save old R0 and get filename as R0
  Push $R1 ; save R1
  Push $R2 ; save R2
  ; now register TLB file R0
  StrCpy $R1 0 ; init R1 with 0 (maybe not neccessary)
  System::Call "Oleaut32::LoadTypeLib(w, *i) i (R0, R1R1) .R2"
  ; R2 contains result, 0 if ok
  IntCmp $R2 0 cont
  LogText "LoadTypeLib returned $R2 with $R0"
  ; debug MessageBox MB_OK "LoadTypeLib returned $R2 with $R0"
  Goto exit
cont:
  ; now R1 contains pointer to typelib
  System::Call "Oleaut32::RegisterTypeLib(i, w, i) i (R1, R0, 0) .R2"
  ; R2 contains result, 0 if ok
  IntCmp $R2 0 exit
  LogText "RegisterTypeLib returned $R2 with $R1, $R0"
  ; debug MessageBox MB_OK "RegisterTypeLib returned $R2 with $R1, $R0"
exit:
  ;; debug MessageBox MB_OK "RegisterTlb: all ok"
  Pop $R2 ; R2 restore
  Pop $R1 ; R1 restore
  Pop $R0 ; R0 restore
FunctionEnd

User Posted Image
离线zcwto
发帖
8
金钱
0
威望
0
只看该作者 122 发表于: 2005-04-17
QUOTE(蓝色网际 @ 2005年01月31日 10时55分)
到我的签名里下一个特别版的 makensis.exe。
[snapback]184216[/snapback]




你的签名 where ??

还有,我发短消息给你,说你的网址是空

我这里是电信线路,成都,访问确实是空的啊? 网易找不到
离线zcwto
发帖
8
金钱
0
威望
0
只看该作者 123 发表于: 2005-04-17
请教firefox

4.8.3 版本信息
4.8.3.1 VIAddVersionKey
[/LANG=语言ID] 键名 值在文件属性的版本表格里添加一个字段。既可以是由系统提供的的一个字段也可以是一个用户定义的字段。随后的这些字段由系统提供:

ProductName
Comments
CompanyName
LegalCopyright
FileDescription
FileVersion
ProductVersion
InternalName
LegalTrademarks
OriginalFilename
PrivateBuild
SpecialBuild
这些字段名称由目标系统翻译,而用户自定义的字段则无翻译。

VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "Test Application"
VIAddVersionKey /LANG=${LANG_ENGLISH} "Comments" "A test comment"
VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "Fake company"
VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalTrademarks" "Test Application is a trademark of Fake company"
VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "© Fake company"
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "Test Application"
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "1.2.3"
4.8.3.2 VIProductVersion
[版本字串_X.X.X.X]
在文件属性版本表格的顶部添加产品版本号。

VIProductVersion "1.2.3.4"


------------------------

格式是什么样子哦? 我测试了都说有错
你举个完整的版权信息的列子看看,谢谢了哈
离线蓝色网际
发帖
1795
金钱
0
威望
0
只看该作者 124 发表于: 2005-04-17
举一个例子?你自己已经举出来了,自己看吧。
不要在 PM 里问问题,PM 不是用来问问题的。
离线zcwto
发帖
8
金钱
0
威望
0
只看该作者 125 发表于: 2005-04-17
VIProductVersion "1.2.3.4"

错误,一样的不行
------------------------------------------------
OK,知道了

成功
------------------------------------------------
还要请问一下

{LANG_ENGLISH}

只能English 语言?

中文简体怎么写??
-------------------------------------------------
已经解决了

{LANG_ENGLISH}中的ENGLASH改成MUI_LANGUAGE

/LANG=${MUI_LANGUAGE}


我继续测试~~如果还有问题,我GO ON哦
离线mtisly
发帖
2
金钱
0
威望
0
只看该作者 126 发表于: 2005-04-18
为什么我不能换ICO,???我一换就出错?为什么呀?
离线蓝色网际
发帖
1795
金钱
0
威望
0
只看该作者 127 发表于: 2005-04-18
查看帮助文档里的 Icon 指令说明。
不要在 PM 里问问题,PM 不是用来问问题的。
离线kingmax112
发帖
*
金钱
*
威望
*
只看该作者 128 发表于: 2005-05-09
谢谢分享,不过太难了,只是参考下
离线suny
发帖
3
金钱
0
威望
0
只看该作者 129 发表于: 2005-05-11
我喜欢这种学习的环境。