我已经为这个问题苦苦挣扎了几天,但找不到任何能为我解决问题的帖子。也许我想要的是不可能的。
我们开发了一个 WinForms 应用程序供我们公司内部使用。
大多数员工在 Windows 中没有管理员权限。
我们的应用程序需要管理员访问机器,并且需要在用户登录时自动启动。
这是我尝试过的:
1) 将快捷方式放入启动文件夹
我可以让应用程序自动启动 ( using a relauncher ),但每次重启时它仍然需要管理员在计算机旁(输入密码)。
2) 注册表项
我创建了一个 Software\Microsoft\Windows\CurrentVersion\Run
注册表项来自动启动应用程序。无论我运行重新启动程序还是应用程序本身,UAC 都要求在每次重新启动(或重新登录)时输入密码。
3) 定时任务
我创建了一个计划任务,以在使用机器上的管理员权限登录时自动启动应用程序(使用以下帐户)。我还选中了“以最高权限运行”框。 UAC 仍然会在每次重启时弹出。
4) Windows 服务
我尝试将该应用程序作为 Windows 服务运行,但它有一个用户界面(Windows 服务禁用了该界面)。
5) 为特定程序禁用 UAC
看起来你可以disable UAC for a specific program但这涉及下载应用程序兼容性工具包、创建某种数据库等。我非常希望我们的 IT 人员不必在每台机器上都这样做。在这一点上,这可能是我唯一的选择。
看起来管理员应该能够安装一个应用程序,以便它在没有提示的情况下自动运行。我是否缺少执行此操作的方法?
最佳答案
您应该将您的程序拆分为一个在用户启动时运行的非管理 UI 和一个执行管理任务的管理服务。
要从 UI 运行需要管理的代码,请使用 WCF 请求服务执行此操作。
请注意,敌对方可能会冒充 UI 并要求服务执行恶意操作;您需要仔细弄清楚服务在响应 IPC 调用时应该能够做什么。
关于c# - 在非管理员帐户上自动启动具有管理员权限的 WinForms 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20250233/