【问题标题】:C# Process.Start() administrator privileges on Windows Embedded POSReady 2009Windows Embedded POSReady 2009 上的 C# Process.Start() 管理员权限
【发布时间】:2014-05-02 05:00:24
【问题描述】:

我正在尝试使用System.DiagnosticProcess.Start() 在某些C# 代码中调用具有管理员权限的批处理文件,如下所述: How to start a Process as administrator mode in C#.

我从提升的命令提示符以及runas /user:administrator program.exe 调用构建的可执行文件。子进程在我的程序外部调用时成功,但在我的程序调用时其管理员任务失败。

我尝试使用清单并设置Process.Verb = "runas",但没有运气。

子进程安装驱动程序,如果相关,我的程序会验证版本号。

感谢您的帮助!

【问题讨论】:

  • 您的程序是否以管理权限运行?您从程序中生成的任何进程都将具有与生成它的进程相同的权限。

标签: c# windows privileges administrator


【解决方案1】:

确保您的应用程序清单中有以下几行:

  <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
  </requestedPrivileges>

您的应用程序将在与其自身相同的高度级别生成其他进程。这意味着如果您的应用程序以非管理员身份运行,那么它产生的每个进程也将在没有管理权限的情况下运行。

在启动批处理文件之前,确保您的父应用程序具有提升的权限。

【讨论】:

  • 这就是我假设的情况,任务管理器报告子进程正在使用管理员帐户运行,但由于未安装驱动程序,因此权限不存在。
  • 好吧,如果它在管理员帐户下运行,它仍然可以在没有管理权限的情况下运行。您需要在应用程序清单中明确要求管理员获得提升的权限。
  • 我已经尝试为我的程序再次设置 requestedExecutionLevel,并且我已经验证它以管理员权限运行(通过文件/注册表修改测试)。有没有办法为批处理文件指定请求的执行级别?子进程仍然没有主程序拥有的相同权限。
【解决方案2】:

原来管理员权限仅在使用runas 时授予可执行文件,因此您不能直接调用批处理文件。而不是p.StartInfo.FileName = program.bat,你应该用p.StartInfo.FileName = "cmd.exe"p.StartInfo.Arguments = " /C ..."来调用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 2011-12-25
    • 2014-04-18
    • 2012-07-06
    • 2013-07-20
    • 2023-01-04
    • 1970-01-01
    相关资源
    最近更新 更多