如何进行设置以使我的软件在安装时需要管理权限?

时间:2008-12-08 01:56:26

标签: .net visual-studio deployment installation

我创建了一个应用程序,它将一些数据写入安装它的目录的根文件夹(在Program Files中)。但在Windows Vista下,程序无法写入目录,因为UAC限制了管理权限。

我需要能够做到以下

  1. 将文件写入程序文件中安装程序的文件夹中。
  2. 如果软件以管理权限运行,则可能。但我不知道如何修改我的设置以始终以管理权限运行它。

    我有什么方法或建议可以实现这个目标吗?

3 个答案:

答案 0 :(得分:1)

我认为Vista为“看起来像安装程序”的程序处理了这个问题。您使用的是NSIS或Inno等安装程序吗?我认为Inno有办法要求这个。但不确定。

:编辑: 从admin / [Setup]权限所需的inno帮助部分:

有效值:  none,poweruser或admin
默认值:  管理员

描述: 此指令的效果取决于用户运行的Windows版本:

在Windows Vista及更高版本:

此指令会影响在安装开始时是否通过“用户帐户控制”对话框请求提升权限。

当设置为admin(默认值)或poweruser时,安装程​​序将始终以管理权限运行。如果安装程序是由非特权用户启动的,则Windows将向具有管理权限的帐户请求密码,然后安装程序将在该帐户下运行。

如果设置为none,则安装程序仅在管理员组成员启动时才具有管理权限。除非您确定您的安装将在非特权帐户上成功运行,否则请勿使用此设置。

在Windows NT / 2000 / XP / 2003上:

此指令指定运行安装所需的最低用户权限。

设置为admin(默认值)时,只有在用户是Administrators组的成员时才会运行安装程序。否则,它将显示以下消息并退出:“安装此程序时,您必须以管理员身份登录。”

设置为poweruser时,只有在用户是Administrators或Power Users组的成员时,才会运行安装程序。否则,它将显示以下消息并退出:“安装此程序时,您必须以管理员或Power Users组成员的身份登录。”

设置为none时,安装程​​序不会检查用户的组成员身份。除非您确定您的安装将在非特权帐户上成功运行,否则请勿使用此设置。

在Windows 95/98 / Me上:

此指令对这些版本的Windows没有任何影响。

答案 1 :(得分:1)

听起来你问题的标题是如何让安装程序以管理权限运行,但你的解释是如何让程序以管理权限运行,以便它可以在运行时写入Program Files。它是哪一个?

如果您真的只想让安装程序以管理权限运行,那么社区维基答案非常准确。确保您的安装程序有一个明显的名称,如“Setup.exe”,Vista使用“启发式”来确定您的安装程序必须以管理员身份运行。

如果您确实想在运行时写入Program Files,请不要。这是Vista的官方建议:改为写入用户的AppData目录。如果您需要重写太多代码,则可以包含一个清单文件,该文件会强制Vista在运行您的应用程序时提示管理权限。如果您的应用程序名为“app.exe”,请包含“app.exe.manifest”文件,其中包含以下内容:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestversion="1.0">
<assemblyidentity version="1.0.0.0" processorarchitecture="X86" name="app.exe" type="win32">
<description>My Application</description>
<trustinfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedprivileges>
<requestedexecutionlevel level="requireAdministrator">
</requestedexecutionlevel>
</requestedprivileges>
</security>
</trustinfo>

答案 2 :(得分:0)

最好的办法是不要在“Program Files”下写任何文件。无论你想写什么,最好写入Windows注册表。然后,您必须修改程序以从注册表而不是该文件中读取信息。但实际上,这就是注册管理机构的用途。