2015-11-11 158 views
0

我正在试图在Windows 8.1上使用NSIS构建一个exe文件。安装程序必须在用户级别运行(而不是管理员,因为这会破坏其他内容)。忽略NSIS安装程序MUI_ICON语句

我无法用以下语句来分配正确的图标的exe文件:

!include MUI2.nsh 
!define MUI_ICON "path_to_icon.ico file" 

以上没有工作,除非我还包括以下内容:

!insertmacro MUI_PAGE_WELCOME 

的包括MUI_PAGE_WELCOME在内的不理想且令人费解的副作用是无法在用户执行级别启动安装程序(运行installer exe时没有窗口显示,但将鼠标悬停在底部任务栏中的图标上显示一个空白窗口)。如果我使用“以管理员身份运行”来调用安装程序,它将启动(窗口显示并安装文件),但会导致启动的应用程序以管理员模式运行(不受欢迎)。

对于我的生活,我无法弄清楚MUI_PAGE_WELCOME和MUI_ICON之间的依赖关系,以及如果使用前者则需要以管理员身份运行exe。

有没有其他人遇到过这个问题?

+0

NSIS版本?您能否请求重现错误的最小示例。 – Anders

回答

2

没有一个完整的例子,我实际上可以编译它很难知道这里发生了什么。

我可以告诉你,当使用MUI时,你必须插入至少一个MUI_PAGE_ *宏和至少一个MUI_LANGUAGE宏。其中一个宏将基本上只是做Icon "${MUI_ICON}"来设置图标,但这是一个实现细节。

要控制UAC标高请求,应使用RequestExecutionLevel属性。

Outfile "Test.exe" 
RequestExecutionLevel user 

!include MUI2.nsh 
!define MUI_ICON "myicon.ico" 

!insertmacro MUI_PAGE_WELCOME ; Commenting out this line has no effect on the icon nor UAC elevation 
!insertmacro MUI_PAGE_INSTFILES 
!insertmacro MUI_LANGUAGE English 

Section 
SectionEnd 
+0

Anders:我发现MUI_PAGE_WELCOME足以设置图标语句。没有它,MUI_ICON语句被忽略。但是,正如我在文章中提到的,除非我们使用“以管理员身份运行”运行它,否则生成的exe不会正确启动。我正在使用'RequestExecutionLevel用户'来确保不要求管理员级别。我会尝试发布重现此问题的最小版本的代码。 – perplexed

+0

@perplexed您是否使用NSIS v2.46或v3.0 beta 2? – Anders

+0

我正在使用3.0b2。我应该恢复到2.46?谢谢。 – perplexed