我的C#代码运行在远程Windows服务器上,我无法登录,只能部署代码。我想从该代码运行Process Monitor - 以“安静”模式启动它,然后在一段时间后停止它。运行Process Monitor的代码在“NT AUTHORITY \ SYSTEM”本地帐户下运行,因此我认为它具有所需的所有权限。我的C#代码如何在“SYSTEM”帐户下运行,启动一个需要提升而不触发提示的程序?
但是,如果我在我的开发人员盒上运行Process Monitor,它会触发权限提升提示。如果我从本地命令行中运行它:
procmon /Terminate
然后我看到的提升提示,确认高程和进程退出(如预期)。
如果我从内C#代码遥远的服务器上运行它:
using (var process = new System.Diagnostics.Process())
{
process.StartInfo.FileName = pathToProcMonExe;
process.StartInfo.Arguments = "/Terminate";
process.Start();
process.WaitForExit();
WriteToLog("Exited");
}
那么它看起来像它只是挂在提升提示,过程永远不会退出。
我再次无法登录并确认高程。我需要以编程方式做所有事情。
我的进程在“NT AUTHORITY \ SYSTEM”下运行。它如何运行需要提升而不触发提示的Process Monitor?
这可能有助于:_UAC自我提升(CSUACSelfElevation)_ https://code.msdn.microsoft.com/windowsdesktop/csuacselfelevation-644673d3 –
@JeroenvanLangen有一个带有注释的catch语句用户拒绝提升这很可能意味着提示仍然存在。 – sharptooth
您作为服务运行吗? – lokusking