2017-02-28 4 views
1

Ich habe C# Programm, das den Laufwerkbuchstaben des eingesetzten USB findet und es einer Variablen _usbDriveLetter zuweist.Execute .cmd Datei von C# ohne irgendein Popupfenster

Ich muss den Wert _usbDriveLetter an eine Stapeldatei übergeben, die den Befehl CHKDSK _usbDriveLetter weiter ausführt.

Ich habe den folgenden Code, um den Wert _usbDriveLetter übergeben und führen Sie die Batch-Datei.

 string _usbDriveLetter = @"F:\"; //For testing here 
     string MyBatchFile = @"<FILEPATH>\chkdsk.cmd"; 

     ProcessStartInfo proc = new ProcessStartInfo(); 
     proc.CreateNoWindow = true; 
     proc.FileName = MyBatchFile; 
     proc.Arguments = usbDriveLetter ; 
     Process.Start(proc); 

Frage: Sobald der Code die Zeile erreichen die Batch ausführen, wird das folgende Fenster erscheinen die CMD.exe beginnen zu können. Wie kann ich die Ausführung im Hintergrund/Stumm machen (zumindest ohne Benutzerinteraktion).

enter image description here

+2

Entweder UAC deaktivieren oder das Hauptprogramm mit hohen Rechten starten – dcg

+0

Ich erhöhe bereits die Benutzerrechte in der .cmd-Datei. Das Ausführen meiner Anwendung mit erhöhten Rechten ist nicht möglich. – skm

+3

Wenn UAC eingeschaltet ist, erfordert es Benutzerinteraktion, das ist der springende Punkt. Sie werden immer eine Eingabeaufforderung erhalten. – Equalsk

Antwort

0

Sie konnten die .cmd auf eine .exe versuchen Umwandlung und die Eigenschaft unsichtbar Einstellung dann die EXE-Datei ausgeführt von C#

Hier ist die Ressource, die zu tun - http://www.f2ko.de/en/ob2e.php

1

Dies sollte Arbeit.

Process runprogram = new Process(); 
          ProcessStartInfo programinfo = new ProcessStartInfo(); 
          programinfo.WindowStyle = ProcessWindowStyle.Hidden; 
          programinfo.CreateNoWindow = true; 
          programinfo.UseShellExecute = false; 
          programinfo.RedirectStandardOutput = true; 
          programinfo.FileName = "cmd.exe"; 
          programinfo.Arguments = " /C \"<FILEPATH>\chkdsk.cmd\""; 
          runprogram.StartInfo = programinfo; 
          runprogram.Start(); 

Bei der ersten Ausführung des Programms auch nach der Erhöhung der Rechte fragen.

+0

danke, aber es wird das Problem nicht lösen, da mein Problem nicht das Konsolenfenster ist. Mein Problem ist die Windows-Popup-Nachricht. Offenbar gibt es keine Lösung für dieses Problem, außer dass ich meine .exe mit erhöhten Rechten ausführe oder die UAC-Einstellungen ändere. – skm

+0

@skm Ich habe es gerade getestet und es funktioniert? Fügen Sie in Ihrer Anwendung eine Manifestdatei hinzu, deren Ausführungsebene auf highestAvailable festgelegt ist, und verwenden Sie diesen Code. –

+0

könnten Sie ein Beispiel Manifest für diesen Zweck bereitstellen? – skm