2010-01-05 12 views
6

Ich versuche, eine MSI Datei von C# mit der Methode Proces.Start auszuführen. Die MSI-Datei ist in Ordnung, weil ich das normal ausführen kann, aber wenn ich versuche, die MSI-Datei innerhalb einiger C# -Code auszuführen, erhalte ich den folgenden Fehler.MSI läuft nicht in C#

„Dieses Installationspaket konnte nicht geöffnet werden. Stellen Sie sicher, dass das Paket vorhanden ist, und dass Sie darauf zugreifen können, oder Kontakt mit dem Hersteller, um überprüfen, ob dies ein gültiges Windows Installationspaket ist“

Im Folgenden finden Sie den Code, den ich die MSI-Datei auszuführen bin mit ...

Process p = Process.StartApplication.StartupPath "/Packages/Name.msi"); 

p.WaitForExit(); 

Wie kann ich behebt dieses Problem?


OK, ich habe es jetzt. Ich habe es nur geändert, um die Datei setup.exe, die mit der MSI-Datei generiert wird, anstelle der MSI-Datei ausführen ...

Antwort

14

msi-Dateien können nicht auf eigene Faust ausgeführt werden. Wenn Sie darauf klicken doppelt, wird Windows starten

msiexec /i PathToYour.msi

Haben Sie versucht, das explizit zu tun?

Beispiel: (Mit freundlicher Genehmigung @Webleeuw)

Process p = new Process(); 
p.StartInfo.FileName = "msiexec"; 
p.StartInfo.Arguments = "/i PathToYour.msi"; 
p.Start(); 
+0

vergib mir zurückgeblieben zu sein, aber wie würde ich tun, dass mit der Process.Start? – Cwisking

+0

Siehe Webleeuws Antwort für eine vollständige Probe. –

9

Zusatz Plakat Kommentar auf Benjamins Antwort auf die Frage:

Process p = new Process(); 
p.StartInfo.FileName = "msiexec"; 
p.StartInfo.Arguments = "/i PathToYour.msi"; 
p.Start(); 
+2

Funktioniert nicht für mich. Es zeigt die Windows Installer Box mit den Anweisungen aus irgendeinem Grund. – alice7

6

Es ist auch möglich, die MSI-Datei direkt mit dem zugehörigen auszuführen Anwendung. Dies geschieht, wenn Sie UseShellExecute zu true gesetzt:

Process.Start(new ProcessStartInfo() 
    { 
     FileName = @"c:\somepath\mySetup.msi", 
     UseShellExecute = true 
    }); 
+0

das funktionierte für mich während/ich aus irgendeinem Grund nicht ... – Niklas