【问题标题】:How can I make a setup that makes my software require administrative priviliges while installation?如何进行设置以使我的软件在安装时需要管理员权限?
【发布时间】:2008-12-08 01:56:25
【问题描述】:

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

我需要能够做到以下几点

  1. 在程序文件的安装文件夹中写入文件。

如果软件以管理权限运行,则可以做到这一点。但我不知道如何修改我的设置以始终以管理权限运行它。

有什么方法或建议我可以做到这一点吗?

【问题讨论】:

  • 我想我需要澄清我的问题。我的意思是如何进行安装,将程序标记为以管理权限运行。

标签: .net visual-studio deployment installation


【解决方案1】:

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

如果您真的只是希望安装程序以管理权限运行,社区 wiki 的答案非常准确。确保您的安装程序有一个明显的名称,例如“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】:

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

    :编辑: 从管理员/ [Setup] 所需权限部分的 inno 帮助中:

    有效值: 无、超级用户或管理员
    默认值: 管理员

    说明: 该指令的效果取决于用户运行的 Windows 版本:

    在 Windows Vista 及更高版本上:

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

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

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

    在 Windows NT/2000/XP/2003 上:

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

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

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

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

    在 Windows 95/98/Me 上:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 如果你不知道这个文件是什么,你怎么知道它属于注册表?如果它是一个配置文件(优先于注册表)怎么办?
      猜你喜欢
      • 1970-01-01
      • 2014-05-31
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多