- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
还有一个新手 NSIS 问题。这是脚本:
; -*-nsis-*-
Name "ndhtest"
OutFile "FooStartMenuTest.exe"
XPStyle on
!define FOO_SRC c:\users\nhughes\foo
InstallDir "$PROGRAMFILES\Initech\"
Icon ${FOO_SRC}\foo_logo.ico
UninstallIcon ${FOO_SRC}\uninstall.ico
Page instfiles
UninstPage uninstConfirm
UninstPage instfiles
Section
SetOutPath $INSTDIR
File ${FOO_SRC}\foo.bat
WriteUninstaller "$INSTDIR\uninstall.exe"
CreateDirectory $SMPROGRAMS\Initech
CreateShortCut $SMPROGRAMS\Initech\Foo.lnk $INSTDIR\foo.bat "" \
"${FOO_SRC}\foo_logo.ico"
CreateShortCut $SMPROGRAMS\Initech\Uninstall.lnk $INSTDIR\uninstall.exe "" \
"${FOO_SRC}\uninstall.ico"
SectionEnd
Section "Uninstall"
Delete $SMPROGRAMS\Initech\Foo.lnk
Delete $SMPROGRAMS\Initech\Uninstall.lnk
RMDir $SMPROGRAMS\Initech
Delete $INSTDIR\Foo.bat
Delete $INSTDIR\uninstall.exe
RMDir $INSTDIR
SectionEnd
除了在 ProgramData 下保留快捷方式外,卸载似乎有效:
Directory of c:\ProgramData\Microsoft\Windows\Start Menu\Programs\Initech
08/10/2011 04:07 PM <DIR> .
08/10/2011 04:07 PM <DIR> ..
08/10/2011 04:23 PM 1,847 Foo.lnk
08/10/2011 04:23 PM 1,885 Uninstall.lnk
2 File(s) 3,732 bytes
2 Dir(s) 1,387,345,117,184 bytes free
我的脚本出了什么问题导致这些东西一直悬而未决?
这是卸载程序写入其控制台的内容(我添加了一条列出 $SMPROGRAMS 的 DetailPrint 消息):
smprograms=C:\Users\nhughes\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
Remove folder: C:\Users\nhughes\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Initech\
Delete file: C:\Program Files (x86)\Initech\foo.bat
Delete file: C:\Program Files (x86)\Initech\uninstall.exe
Remove folder: C:\Program Files (x86)\Initech\
Completed
因此 ProgramData 下的链接永远不会被引用,它正在寻找 AppData\Roaming 下的链接。
我正在 Windows 7 上对此进行测试,但这里的核心问题是我希望能够编写一个适用于从 XP 到 Windows 7 的所有系统的脚本,而不管 Windows 松鼠在不同版本的不同点。这看起来可能很痛苦。
最佳答案
如果 DetailPrint
被添加到 nsis 脚本中,很明显 NSIS 试图在 C:\Users
下创建文件,但它们实际上是在c:\ProgramData
。这个ProgramData
目录是个奇怪的东西,因为用dir C:\
看不到它,但是可以用cd
进入该目录。此类谜团是由 Virtual Store 引起的,这是 Windows 7 的一项棘手功能。
现在是解决方案。 Windows 应用程序应该定义它们的执行级别,否则系统可能会以意想不到的方式运行。您还记得一些应用程序询问是安装“仅供当前用户使用”还是“供所有用户使用”?这是我们需要声明的。
如果我们插入 nsis 指令 RequestExecutionLevel user
,则为当前用户创建快捷方式。如果我们执行 RequestExecutionLevel admin
,那么我们还应该将 SetShellVarContext all
添加到安装和卸载部分。
此答案基于 nsis wiki 上的文章:Shortcuts removal fails on Windows Vista ,其中给出了两种方法的示例。
关于nsis - 我的 NSIS 脚本的卸载没有从 ProgramData 目录中删除链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7018122/
我有一个安装程序,一个编译好的 NSIS 脚本,它首先检查我的应用程序的另一个版本是否正在系统上运行。如果存在另一个实例,则它首先触发静默卸载,然后继续安装新实例。 我使用 ExecWait 在静默模
我必须比较当前文件的版本和已经安装在 NSIS 安装程序中的版本。我知道版本号是字符串,但我在几个地方读到,如果逻辑操作需要,NSIS 会自动将字符串转换为整数。 仅出于测试目的,我编写了以下脚本:
我们有一个包含多个组件的安装程序,每个组件都有自己的部分。我试图找出我们现有的代码如何实际设置每个部分的大小。我们有 3 个组件,如果选中/取消选中,它们将更新组件页面上的“所需空间”值。 我当前添加
我正在努力将图像添加到用NSIS/MUI2编写的安装程序的第一页中。 这是我正在使用的代码的精简版。 !include "MUI2.nsh" !define MUI_HEADERIMAGE !
NSIS具有您在脚本中定义的Name变量: Name "MyApp" 它定义了安装程序的名称,并显示为窗口标题等。 有没有办法将.NET版本号从我的主EXE中拉出来并将其附加到名称中? 这样我的安装程
当我运行静默 NSIS 安装程序时(从控制台,如 installer.exe/S/D=C:\Foo),它会立即移至后台。我想等到它完成安装后再做其他事情。我可以传递一个标志来告诉安装程序要阻止吗? 最
字符串 "jdbc:postgresql://localhost:5432/DatabaseName" 我的要求是只获得 数据库名称 从上面的字符串。 我试过下面的链接,但没有用。 ${Explode
我需要使用 SVN 标签 $Revision$在 NSIS 脚本中。显然,NSIS 编译器将这个 $Revision 理解为一个变量。我怎么能逃过这块钱呢? 我试过反斜杠,它不起作用。 最佳答案 Me
我有一个 NSIS 脚本要求用户提供安装目录,但我想要求用户在新页面上再提供一个临时目录。有没有一种方法可以使用 nsDialogs 添加一个新页面,它为例如 指定一个临时目录 C:\temp 还让他
我正在使用 VS 2010 为 NSIS 构建一个插件,我很想设置该项目,以便从简单的 NSI 文件自动构建测试设置。 一切似乎都很好,只是我不知道如何让 NSIS 在我的项目的输出文件夹而不是 C:
如果选择了某个组件,我想提示用户提供额外信息,但我不确定如何检查是否选择了给定的组件。好像http://nsis.sourceforge.net/Docs/Chapter4.html#4.9.13.2
在我的安装程序中,我想创建一个空文件。在 linux 中,我会使用 touch 命令,但是在 NSIS 中最简单的方法是什么? 最佳答案 #Compile time !appendfile "$%te
在构建我的安装程序时,我可以让用户通过调用来选择要安装的部分 !insertmacro MUI_PAGE_COMPONENTS 如何在卸载程序中提供类似的功能? 我知道如何自己制作这些部分(感谢 th
我试图通过从外部传递版本号来概括一个安装文件。我希望能够做到这一点: makensis myscript.nsi parameter=value 然后读取脚本中的参数,以便使用相同的脚本生成不同版本的
我正在尝试使我的设置脚本模块化。我根据要求从主安装脚本中调用 setup exe。我想将命令行参数传递给被调用的 exe。有人可以告诉我如何访问被调用脚本中的命令行参数。 提前致谢。 最佳答案 您可以
我使用 NSIS 开发了一个安装程序.每次重新安装应用程序时,我都想创建现有数据库文件的备份。 如何使用以下格式“当前日期时间”重命名这些数据库文件(例如:201003101140 表示 2010-0
有人可以帮我删除 NSIS 安装程序中的“Nullsoft”标签吗?请引用下图。 最佳答案 BrandingText " " 关于nsis - 从 NSIS 安装程序中删除品牌,我们在Stack Ov
如何确定我的 NSIS 函数是否有可用的互联网连接? 我看到了 Intec 插件,但我没有找到怎么做 谢谢。 最佳答案 你应该为此使用 Dailer 插件。 试试这个: Dialer::GetConn
我是 NSIS 脚本的新手。我想创建一个自定义安装程序,它将环绕另一个安装程序 (FEKO)。此方法Embedding other installers NSIS 网站上的建议对我不起作用 脚本编译正
我对 NSIS 很陌生。 我正在尝试请求管理员权限以运行安装程序,因为它与注册表有些困惑。 我对“RequestExecutionLevel”和“MULTIUSER_EXECUTIONLEVEL”的问
我是一名优秀的程序员,十分优秀!