2017-12-13 4 views
3
Process p = new Process(); 
p.StartInfo.FileName = "dism"; 
p.StartInfo.Arguments = "/online /get-packageinfo /packagename:WinEmb-File-Based-Write-Filter~31bf3856ad364e35~amd64~~6.1.7601.17514"; 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.RedirectStandardError = true; 
p.StartInfo.CreateNoWindow = true; 
p.StartInfo.RedirectStandardOutput = true; 
p.StartInfo.RedirectStandardInput = true; 
p.Start(); 

string output = p.StandardOutput.ReadToEnd(); 

p.WaitForExit(); 
p.Close(); 

ich Ausgang:DISM Anruf über C#

Sie können kein 64-Bit-Betriebssystem mit einer 32-Bit-Version von DISM bedienen. Verwenden Sie bitte die DISM-Version, die der Architektur Ihres Computers entspricht.

für Filenamen Versucht: "C: \ WINDOWS \ system32 \ dism.exe" und "C: \ WINDOWS \ SYSWOW64 \ DISM.exe"

und immer noch dasselbe Ergebnis.

Der Computer läuft unter Windows 7 Embedded.

EDIT: Haben Sie versucht:

Calling dism.exe from System.Diagnostics.Process Fails

aber immer noch nicht funktioniert ..

+0

Können Sie den Befehl über die Befehlszeile ausführen? Sie sagen auch, dass Sie zwei verschiedene Versionen von 'dism.exe' in verschiedenen Ordnern ausprobiert haben. Der von Ihnen angegebene Code gibt jedoch keinen Ordner an. Ihr Problem scheint nicht mit der Programmierung zu tun zu haben und ist eher ein Problem beim Ausführen des richtigen Befehls, der Ihrem Betriebssystem entspricht. –

+0

Wenn ich von der Befehlszeile ausführen, geht es gut. Gefunden etwas werde es versuchen .. Wenn es funktioniert krank post es :) – Nenad

+1

@Nenad, vielleicht ist Ihre WPF-App in 64-Bit kompiliert und Probleme beim Aufruf von 32-Bit-Version von dism.exe, aber ich weiß es nicht. – derloopkat

Antwort

1

gefunden Lösung! Machen Sie alle Projekte/Setups 64-Bit-Build.

Und durch seine Arbeits folgenden Code:

ProcessStartInfo psi = new ProcessStartInfo("cmd"); 
psi.UseShellExecute = false; 
psi.ErrorDialog = false; 
psi.RedirectStandardError = true; 
psi.RedirectStandardInput = true; 
psi.RedirectStandardOutput = true; 

Process plinkProcess = new Process(); 
plinkProcess.StartInfo = psi; 
plinkProcess.Start(); 

StreamWriter inputWriter = plinkProcess.StandardInput; 
StreamReader outputReader = plinkProcess.StandardOutput; 
inputWriter.WriteLine("dism /online /get-packageinfo /packagename:WinEmb-File-Based-Write-Filter~31bf3856ad364e35~amd64~~6.1.7601.17514"); 
inputWriter.WriteLine("exit"); 
inputWriter.Flush(); 

plinkProcess.WaitForExit(); 

string strOutput = outputReader.ReadToEnd(); 

plinkProcess.Close();