c# - 如何在使用标准用户启动/安装时提升帐户?
问题描述
是否可以使用标准用户权限(没有提升的权限/管理员访问权限)启用/禁用触摸屏槽隐藏(“控制面板\所有控制面板项目\设备管理器”中的人机界面设备)?
我正在用 C# 编写一个应用程序。如果我没有通过 Visual Studio 上的“运行方式”启动我的应用程序,则安全性会阻止访问。
我当前的设置/限制有哪些替代方案:
- 标准用户(基本权利)
- 在安全加密文件中带有密码的管理员帐户。
- 标准用户无法通过 UAC 授予权限,因为他没有权限。
- 使用此代码检查用户是否具有提升/管理员权限:
return new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator);
目前已测试但无法正常工作:
具有
startInfo.Verb = "runas";
标准用户的进程不能接受 UAC 来运行需要管理员权限/提升的进程。 以编程方式提升进程特权?App.manifest:标准用户不能接受 UAC 运行需要管理员权限/提升的应用程序。 如何强制我的 .NET 应用程序以管理员身份运行?
潜在的替代品?
- ACL ???
- App.manifest:使用我的“使用 Zenwork 或 SCCM 的 IT 团队打包程序”中的 install.msi 将其部署到计算机用户上?
- 作为“本地服务”或“系统”运行的服务,以及使用我的“使用 Zenwork 或 SCCM 的 IT 团队打包程序”的 install.msi 调用服务方法的应用程序,以将其部署在计算机用户上?
解决方案
如果您不想在管理操作时(使用 runas)或在每次程序启动时(通过清单)提示 UAC,则需要在第一次程序设置时创建一次服务或计划任务。许多程序使用这种技术,例如 Chrome 进行更新,通常不需要提升权限,但很少进行偶尔的操作。
选择服务方法意味着您必须实现 IPC 机制,例如通过命名管道,以便低权限程序可以与服务对话并要求执行所需的操作。请记住,该服务将始终在后台运行,您不应公开过多的许可操作,否则其他恶意程序可能会使用您的服务来提升自己,或者您还需要一种身份验证方法。
对于计划任务,您可以使用带有命令行参数的相同可执行文件,例如/disabletouch。您只需要从低权限实例手动触发任务。有 TaskScheduler COM 接口(周围存在一些开源包装器)和允许创建任务和手动触发的schtasks工具。可以创建任务以作为管理员或系统帐户运行。至于服务只允许严格和无害的高架操作,以防止误操作。
推荐阅读
- php - 在 PHP 中显示来自 SQL-Server 的 (UTF-8) 数据的问题
- javascript - 我正在尝试在 HTML 中创建一个简单的多项选择程序,但我无法在最后显示他们的分数
- php - 在 php 中使用 curl ftp 将文件传输到服务器时,它会以 .tmp 扩展名和随机名称保存
- symfony - Api 平台关系
- sorting - 为什么选择排序算法的时间复杂度是O(n2)
- sql - 在 SQL 中选择非重复/不同的值
- vagrant - 从singularity-vagrant-box构建奇点图像文件
- django - 结帐视图中的域以使用 Stripe 和 Django 在生产环境中启用付款
- html - 如何在 Node js 中编写 HTML 和 CSS 代码以向用户发送 Eamils
- alfresco - 定制 Alfresco 社区版 Docker Compose 安装的推荐方法