如何在标准用户启动/安装时提升帐户?

问题描述

是否可以使用标准用户权限(没有提升权限/管理员访问权限)通过 hid(“控制面板\所有控制面板项目\设备管理器”中的人机界面设备)启用/禁用触摸屏?
我正在用 C# 编写一个应用程序。如果我没有在 Visual Studio 上通过“运行方式”启动我的应用程序,安全性会阻止访问。

我目前的设置/限制有哪些替代方案:

  • 标准用户(基本权限)
  • 带有密码的管理员帐户 一个安全的加密文件。
  • 标准用户无法通过 UAC 授予权限,因为他没有权限。
  • 使用此代码检查用户是否具有提升/管理员权限:return new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator);

目前已测试但无法正常工作:
  1. 使用 startInfo.Verb = "runas"; 处理 标准用户不能接受 UAC 来运行需要管理员权限/提升的进程。 Elevating process privilege programmatically?

  2. 应用程序清单: 标准用户不能接受 UAC 来运行需要管理员权限/提升的应用程序。 How do I force my .NET application to run as administrator?

潜在的替代品?

  1. ACL ???
  2. App.manifest:使用来自我的“IT 团队打包程序与 Zenwork 或 SCCM”的 install.msi 将其部署到计算机用户上?
  3. 作为“本地服务”或“系统”运行的服务和一个应用程序,该应用程序使用来自我的“IT 团队打包程序与 Zenwork 或 SCCM”的 install.msi 调用服务方法,以将其部署到计算机用户上?

解决方法

如果您不想在管理操作的那一刻(使用 runas)或在每个程序启动时(通过清单)提示 UAC,您需要创建一个服务或计划任务一次,在第一个程序设置。许多程序使用这种技术(例如 Chrome)进行更新,这些程序通常不需要提升的权限,但偶尔需要进行一些操作。

选择服务方法意味着您必须实现 IPC 机制,例如通过命名管道,以便低权限程序可以与服务对话并要求执行所需的操作。请记住,该服务将始终在后台运行,您不应暴露过多的许可操作,否则其他恶意程序可能会利用您的服务来提升自己,或者您还需要一种身份验证方法。

对于计划任务,您可以使用带有命令行参数的相同可执行文件,例如 /disabletouch。您只需要从低权限实例手动触发任务。有 TaskScheduler COM 接口(围绕它存在一些开源包装器)和允许创建任务和手动触发的 schtasks 工具。可以创建任务以作为管理员或系统帐户运行。至于服务,只允许严格且无害的提升操作,以防止滥用。

,

我不知道 IPC /管道机制。但是调用方法足以满足我需要的“OnCustomCommand(int)”:

protected override void OnCustomCommand(int command)
{
    switch (command)
    {
        case 129:
            RestartService_Test();
            break;
        //case 131:
        //    InstallPrinter();
        //    break;
    }
}

另外,如果我想启动或停止 Windows 服务,我需要授予用户一些权限。我会为此检查 ACL:

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...