Set ProcessStartInfo.EnvironmentVariables beim Verb="runas"
Ich bin der Entwicklung einer C# - Anwendung.
Brauche ich, um zu erstellen, und übergeben Sie die Variablen, um einen neuen Prozess, und ich Tue es mit ProcessStartInfo.EnvironmentVariables
.
Den neuen Prozess ausführen müssen, angehoben wird, so bin ich mit Verb = "runas"
var startInfo = new ProcessStartInfo(command)
{
UseShellExecute = true,
CreateNoWindow = true,
Verb = "runas"
};
foreach (DictionaryEntry entry in enviromentVariables)
{
startInfo.EnvironmentVariables.Add(entry.Key.ToString(), entry.Value.ToString());
}
Das problem ist, dass nach dem msdn-Dokumentation:
Müssen Sie die
UseShellExecute
- Eigenschaft auf false um den Prozess zu starten nach dem ändern derEnvironmentVariables
Eigenschaft. WennUseShellExecute
ist wahr, einInvalidOperationException
wird ausgelöst, wenn die Start-Methode aufgerufen wird.
aber die runas
variable erfordert UseShellExecute=true
Gibt es eine Möglichkeit, beides zu tun: führen Sie Prozess als erhöht und auch die Umgebungsvariablen?
BEARBEITEN
Werde ich versuchen, meine Frage anders formulieren...
Gibt es eine Möglichkeit, Argumente übergeben, die sicher zu einem anderen Prozess, so dass nur der andere Prozess wird in der Lage sein zu Lesen der Argumente.
- Vielleicht nicht schön, aber könnte funktionieren: erstellen Sie eine Batchdatei ersten und setzen Sie die environment-vars mit setx /M-Taste Wert. Sie führen Sie zunächst die batch-script und dann real-Befehl. Das wird Durcheinander Ihre machinewide environmentvars obwohl.
- Danke, aber das könnte dazu führen, das eine Sicherheitslücke, da jeder unter diesem user Lesen können die globalen traumhaften Variablen
- Ja, ich sagte bereits, dass es nicht schön ist...und das war eine Untertreibung 🙁
- Haben Sie versucht, die Einstellung der Environment-vars in (mittels System.Umwelt.SetEnvironmentVariable(Schlüssel, balue)); und starten Sie dann den Prozess?
- aber wie kann ich tun, wenn UseShellExecute = true?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es funktioniert, aber der Nachteil an der Sache ist, dass es zeigt auch eine zweite Eingabeaufforderung, in der Umwelt vars sind nur im Zusammenhang mit der der Prozess gestartet, so werden die Einstellungen nicht propagieren, um die ganze box.
Gibt es eine bessere Antwort: Sie können weiterhin call-Verfahren.Start() mit einem ProcessStartInfo, die hat UseShellExecute = true, vorausgesetzt, dass die Methode, die Sie es aufrufen wurde beschriftet mit [STAThread] - Attribut.