我用NSIS写了一个安装程序,我需要它在像C标准的位置上安装一些文件(DLL等):/ Program Files文件/应用程序名称/。我还需要在当前用户的Application Data目录下安装文件。问题是,当用户不在Vista的管理员,我需要提升权限,并在这样的环境变量改变,因此当前的用户现在看来是管理员用户,我结束了在管理用户的目录中安装的,而不是实际用户。你必须在启动安装程序,所以我不能抢的用户名,然后提升提升。有没有搞清楚实际用户是谁,当我运行一个安装程序作为管理员的一些合理的方式?

编辑: 不幸的是其复制在第一次运行的数据是不是一种选择。该应用程序将无法使用。我在写用户的目录,因为它是一个MS Word模板的东西工作。我的东西不会跑没有模板,所以我必须写上安装模板,Word需要的模板是在用户的AppData目录。

有帮助吗?

解决方案

我所有的NSIS安装使用这个UAC插件: http://nsis.sourceforge.net / UAC_plug-在

您可以提升到只要你启动安装程序管理员。这滋生您的安装做所有的工作的第二个实例。但是,你可以调用的代码段,将在原有的工艺中启动安装程序的用户运行。

所以,你可以像这样安装程序部分:

Section "Install My Program" SecMain
    ...    
    # Install files to common folders
    ...
    !insertmacro UAC.CallFunctionAsUser CopyUserWordTemplate
    ...
SectionEnd

Function CopyUserWordTemplate
    SetOutPath $LOCALAPPDATA
    File "MyWordTemplate.dot"
FunctionEnd

其他提示

如果另一个用户试图运行该应用程序?然后把这些文件将无法使用 - 这是我战斗了好几个月的一个问题...

我发现,最好的解决办法是采取一个鲜为人知的(和完全无证)视窗称为有效设置特征的优势。请参见 http://www.etlengineering.com/installer/activesetup.txt 了很好的说明它是如何工作。

这是IE用来安装每个用户设置,来总结以上的链接相同的特征,基本上就创建一个注册表项哪些窗口用户登录在每次检查。如果在HKCU键的值小于在HKLM发现之一,它在您定义的脚本/程序/不管。你每用户文件安装到Program Files文件夹,然后使用智能安装程序的功能将其复制到用户的个人资料,他们下次登录。如果你需要确保他们在那里当安装完成时,然后计划重启安装完成时。

PS。如果使用MSI代替NSIS那么你没有当您启动安装程序和Vista应在执行序列的开始触发海拔提升(如果安装程序设计不当 - 很少有) - 但是,你正在使用NSIS然后我猜你将需要触发海拔在运行安装程序时。

编辑:哈哈,我确切的问题是与MS Word模板也!我发现的Word模板的解决方案是从HKLM\SOFTWARE\Microsft\Windows\CurrentVersion\App Paths\Winword.exe读取安装目录,并安装到STARTUP文件夹包含在该注册表项中的路径下方。用户将被提示,让即使它的数字签名的宏在第一次运行时执行,但它适用于所有用户。确保模板设置为只读,以及避免以后的任何权限错误。

看那视窗7徽标计划文档。它指出:

  

请注意,在Per-机的安装,用户数据必须在第一次运行,而不是因为没有正确的用户位置存储日期在安装时在安装过程中被写入。

如果你的应用仅用于一个用户。然后,你应该安装到本地设置文件夹(在Vista和Windows 7稍有不同的名称,我认为)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top