首先,我想强调一点,我不是要做任何“令人讨厌的”或“黑客”的事情,我也不想在这里向用户隐瞒任何内容。
在我的应用程序的安装(使用InstallShield LE)期间,Windows UAC会提示用户以管理员模式运行;如果用户接受它 - 安装继续(标准行为),用户再次可以检查将该程序添加到自动运行列表的选项(通过向HKLM /../运行添加注册表项)。一切都很好,很正常。但是每次Windows重新启动后,当此应用程序启动时,UAC就会启动并请求用户权限。问题是,如何避免它,因为它有点烦人(但我的应用程序需要管理员权限才能运行)?
我的意思是用户已经在安装时授予了这样的权限,所以我看不出每次启动时都需要提示的原因?此外,我相信大多数防病毒软件等都需要提升操作权限,但UAC不会在Windows启动时提示它。
感谢您提供任何建议,信息,意见或解决方案。
答案 0 :(得分:4)
您的应用真的是否需要升级?或者,当用户使用它来执行操作时,是否需要提升访问权限?如果可以的话,将后面的管理任务放到一个单独的exe中,允许主exe以没有提升的方式启动 - 当你稍后执行工作进程时,它将根据需要进行UAC。
在安装时,正如您所注意到的,您已经提升了安装程序。如果您想在后续运行中自动运行提升代码,则需要安装服务 - 这就是您提到的所有其他应用程序所做的事情。
答案 1 :(得分:1)
在交互式会话中启动的流程无法绕过UAC。您可以使用以特权用户身份运行的服务,但如果您无需管理员权限就可以找到办法来做任何事情。
答案 2 :(得分:1)
程序无法在没有提示的情况下运行升级。您要做的是将需要提升的应用程序部分纳入作为系统运行的Windows服务。然后,您的自动启动应用程序可以对服务进行远程调用,以删除用户在不升级的情况下无法执行的活动。
答案 3 :(得分:0)
没有完成,但我发现这篇文章Selectively disable UAC for your trusted Vista applications表示使用微软的“Application Compatibility Toolkit”。
兼容性管理员允许您创建数据库 兼容性修补程序,允许您运行某些应用程序 没有随附的UAC。
Compatibility Administrator
运行Fix
按钮。当您看到“创建新应用程序修复”向导时...输入有关您的应用程序的详细信息Compatibility Level
RunAsInvoker
作为修复似乎是最后一个
选择RunAsInvoker选项将允许应用程序启动 无需UAC提示。
如果调用者是管理员,我应该做你想做的事情,我认为你可以在启动时使用调度程序执行此操作:Create Administrator Mode Shortcuts Without UAC Prompts in Windows 7 or Vista
正如您所看到的,它以兼容模式运行您的应用程序,这可能是您可能接受的,也可能是不可接受的。