我创建了一个应用程序,它将一些数据写入安装它的目录的根文件夹(在Program Files中)。但在Windows Vista下,程序无法写入目录,因为UAC限制了管理权限。
我需要能够做到以下
如果软件以管理权限运行,则可能。但我不知道如何修改我的设置以始终以管理权限运行它。
我有什么方法或建议可以实现这个目标吗?
答案 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注册表。然后,您必须修改程序以从注册表而不是该文件中读取信息。但实际上,这就是注册管理机构的用途。