2016-07-26 4 views
0

私のC#コードは遠くにあるWindows Server上で実行されています。私はログインできず、コードを展開するだけです。私はそのコードからProcess Monitorを実行したいです - "静かな"モードで起動し、しばらくしてから停止してください。プロセスモニタを実行するコードは "NT AUTHORITY \ SYSTEM"ローカルアカウントで実行されているので、必要なすべての権限があると仮定します。"SYSTEM"アカウントで実行されているC#コードは、プロンプトをトリガせずに高度を必要とするプログラムをどのように起動しますか?

私の開発者ボックスでプロセスモニタを実行すると、権限昇格のプロンプトが表示されます。

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はその環境で昇格プロンプトなしでうまく動作します。

0

List of UAC prompt triggers?ここでは、UACダイアログがレジストリ設定や実行可能ファイル名など、いくつかの可能な決定によってトリガされることを示しています。宛先オペレーティングシステムでUACプロンプトがオフになっていない場合は、何もできないと思います。オペレーティングシステムは、ユーザーに通知せずに管理者レベルのシステムユーティリティを生成するプログラムに対して自分自身を保護しようとしています。

しかし、Process Monitorアプリケーションに表示されるプロセスモニタ情報は、.netのSystem.Diagnostics名前空間で使用できるため、必要なデータを取得するためにProcess Monitorに実際にシェルする必要はありません。

+0

'System.Diagnostics'を使用してすべてのAPI呼び出しをトレースできますか? – sharptooth

+0

Procmonから収集しようとするデータは何ですか?おそらくそれは別のクエリの主題です。なぜなら、ユーザーが明示的に無効にしない限り、UACのポップアップを防ぐことはできないと思うからです。 – PhillipH

関連する問題