【发布时间】:2016-07-19 12:48:26
【问题描述】:
我创建了一个 WPF 应用程序,它需要在 Windows 命令提示符下执行命令。因此我创建了以下代码:
// The 'RunAs' indicates it needs to be elevated.
var process = Process.Start(new ProcessStartInfo(@"C:\Windows\System32\wevtutil.exe", commandArgs)
{
//Process will be started as admin
Verb = "runAs",
//Do not show the shell window
CreateNoWindow = true,
UseShellExecute = false,
RedirectStandardError = true,
RedirectStandardOutput = true,
RedirectStandardInput = true,
})
此命令需要管理员权限。因此,我添加了一个清单文件,它以管理员权限启动 WPF 主机:
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"><requestedExecutionLevel level="requireAdministrator" uiAccess="false" /></requestedPrivileges>
到目前为止,此解决方案运行良好。我可以启动我的 WPF 应用程序,通过按下按钮触发一个事件,然后我的带有此命令提示符的进程将被执行。
现在我想通过拖放添加一些文件到我的 WPF 客户端。由于我的应用程序以管理员权限运行,因此无法将文件从 Windows 文件资源管理器拖放到我的应用程序中。
可以使用Total Commander 拖放文件,因为Total Commander 可以使用管理员权限启动。向我的 WPF 主机添加 OpenFileDialog 是可行的,但拖放会更舒服。
当我在没有管理员权限的情况下运行我的应用程序时,拖放可以工作,但我的应用程序由于缺乏权限而无法执行命令提示符。
如何实现拖放以添加我的文件,然后在我需要这些文件作为参数的地方执行具有管理员权限的命令提示符?
【问题讨论】:
-
为什么你决定启动提升进程的应用程序必须具有管理员权限?
-
我想执行 C:\Windows\System32\wevtutil.exe 来安装一堆 ETW 清单。 wevtutil.exe 需要管理员权限才能执行此操作。
-
我认为你的问题不能通过代码来解决。这是一种 Windows 安全行为。但是我还是很好奇这个问题。 superuser.com/questions/59051/…
-
@Philipp,好的,
wevtutil.exe需要管理员权限,您可以使用Verb = "runAs"正确操作。您要将文件拖放到哪里?进入wevtutil.exe还是进入运行wevtutil.exe的应用程序? 应用程序不必具有管理员权限。
标签: c# .net wpf cmd drag-and-drop