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?
könnte dies helfen: _UAC Selbstüberhöhung (CSUACSelfElevation) _ https://code.msdn.microsoft.com/windowsdesktop/csuacselfelevation-644673d3 –
@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
Laufen Sie als Dienst? – lokusking