2016-07-26 21 views
0

我的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?

+0

这可能有助于:_UAC自我提升(CSUACSelfElevation)_ https://code.msdn.microsoft.com/windowsdesktop/csuacselfelevation-644673d3 –

+0

@JeroenvanLangen有一个带有注释的catch语句用户拒绝提升这很可能意味着提示仍然存在。 – sharptooth

+0

您作为服务运行吗? – lokusking

回答

0

原来这不是海拔提示。这是一个“这是我的许可协议,请阅读并接受它”Process Monitor显示的对话框,尽管是静音模式。一旦接受许可协议,Process Monitor可以在该环境中没有提升提示的情况下正常运行。

0

这里有一个相关的讨论List of UAC prompt triggers?它表示UAC对话框是由许多可能的决定触发的,包括注册表设置和可执行文件名。如果在目标操作系统中没有关闭UAC提示符,我认为你无能为力 - 操作系统正试图保护自己免受产生管理员级别系统实用程序的程序而不通知用户。

但是 - 进程监视器应用程序中显示的进程监视器信息可以在.net的System.Diagnostics命名空间中使用,因此不需要真正装载到进程监视器以​​获取所需的数据。

+0

我可以使用“System.Diagnostics”跟踪所有API调用吗? – sharptooth

+0

您打算从Procmon收集哪些数据?也许这是另一个查询的主题 - 因为我不相信你将能够防止UAC弹出,除非用户已明确关闭它。 – PhillipH

相关问题