2016-07-26 28 views
0

Mein C# -Code läuft auf einem weit entfernten Windows-Server, auf dem ich mich nicht anmelden kann, sondern nur Code bereitstellen. Ich möchte Process Monitor von diesem Code ausführen - starten Sie es im "Quiet" -Modus, dann stoppen Sie es nach einer Weile. Der Code, der Process Monitor ausführen würde, läuft unter "NT AUTHORITY \ SYSTEM" lokalen Konto, so dass ich davon ausgehe, dass es alle erforderlichen Rechte hat.Wie würde mein C# -Code unter dem Konto "SYSTEM" ein Programm starten, das eine Erhöhung erfordert, ohne eine Eingabeaufforderung auszulösen?

Wenn ich jedoch Process Monitor auf meiner Entwickler-Box ausgeführt habe, wird eine Aufforderung zur Rechteerhöhung ausgelöst. Wenn ich es lokal von der Befehlszeile aus starte:

dann sehe ich eine Erhöhung Aufforderung, bestätigen Höhe und der Prozess beendet (wie erwartet).

Wenn ich laufen sie von innen C# -Code auf dem fernen Server:

using (var process = new System.Diagnostics.Process()) 
{ 
    process.StartInfo.FileName = pathToProcMonExe; 
    process.StartInfo.Arguments = "/Terminate"; 
    process.Start(); 
    process.WaitForExit(); 
    WriteToLog("Exited"); 
} 

dann sieht es aus wie es hängt nur an der Anhebungsaufforderung und der Prozess nie verlässt.

Wieder kann ich mich nicht einloggen und die Höhe bestätigen. Ich muss alles programmatisch machen.

Mein Prozess läuft unter "NT AUTHORITY \ SYSTEM". Wie läuft Process Monitor, der eine Erhöhung erfordert, ohne die Eingabeaufforderung auszulösen?

+0

könnte dies helfen: _UAC Selbstüberhöhung (CSUACSelfElevation) _ https://code.msdn.microsoft.com/windowsdesktop/csuacselfelevation-644673d3 –

+0

@JeroenvanLangen Es gibt eine 'catch' Anweisung mit einem Kommentar' Der Benutzer lehnte die Erhebung . "was wahrscheinlich bedeutet, dass die Aufforderung immer noch da ist." – sharptooth

+0

Laufen Sie als Dienst? – lokusking

Antwort

0

Es stellte sich heraus, dass es keine Aufforderung zur Erhöhung war. Es war ein Dialogfeld "Hier ist meine Lizenzvereinbarung, bitte lesen und akzeptieren", die von Process Monitor trotz des Silent-Modus angezeigt wird. Sobald die Lizenzvereinbarung akzeptiert wurde, kann Process Monitor in dieser Umgebung problemlos ohne Eingabeaufforderungen für die Höhe ausgeführt werden.

0

Es gibt eine verwandte Diskussion hier List of UAC prompt triggers?, die angibt, dass der UAC-Dialog durch eine Reihe von möglichen Entscheidungen ausgelöst wird, einschließlich Registrierungseinstellungen und ausführbaren Dateinamen. Wenn die UAC-Eingabeaufforderung im Zielbetriebssystem nicht deaktiviert ist, kann ich nichts unternehmen - das Betriebssystem versucht, sich gegen ein Programm zu schützen, das Systemprogramme auf Administrator-Ebene erzeugt, ohne den Benutzer zu benachrichtigen.

Die Prozessüberwachungsinformationen, die in der Process Monitor-Anwendung angezeigt werden, sind jedoch im System.Diagnostics-Namespace von .net verfügbar. Daher müssen Sie keine Prozessüberwachung an Process Monitor senden, um die benötigten Daten zu erhalten.

+0

Kann ich alle API-Aufrufe mit 'System.Diagnostics' verfolgen? – sharptooth

+0

Welche Daten möchten Sie von Procmon sammeln? Vielleicht ist das Thema einer anderen Abfrage - weil ich glaube nicht, dass Sie in der Lage sein werden, UAC-Popup zu verhindern, wenn der Benutzer es explizit ausgeschaltet hat. – PhillipH