2010-11-04 4 views
1

Lorsque j'essaie d'exécuter une commande msi à l'aide de System.Process.Start ("test.msi") dans une application vb, j'obtiens l'erreur suivante.System.Process.Start - exécution du problème msi

Le package d'installation n'a pas pu être ouvert. Contactez le vendeur de l'application ...

fichier msi fonctionne très bien lorsque vous double cliquée, essayé System.Process.Start avec des fichiers texte et les fichiers exe et ils fonctionnent très bien, le seul problème avec msi

fichiers. Vista en cours d'exécution. Aussi essayé xp, mais pas de chance

Merci

+1

Le cœur du problème est que ne sont pas exécutables MSI. Vous pouvez double-cliquer dessus pour ouvrir car toutes les versions de Windows ont l'utilitaire MSI intégré et il sait ouvrir .msi avec l'utilitaire MSI – Samuel

+1

@Samuel, ce n'est pas tout à fait ce qu'il y a à faire. Un '.txt' n'est pas non plus un exécutable mais vous pouvez faire' System.Process.Start ("file.txt") 'et ça marchera. J'ai mis à jour ma réponse pour expliquer. –

+0

Vous avez 100% raison. Devrait avoir recherché: "..Par conséquent, le nom de fichier n'a pas besoin de représenter un fichier exécutable.Il peut être de tout type de fichier pour lequel l'extension a été associée à une application installée sur le système." -MSDN – Samuel

Répondre

0

Pour aider à identifier le problème, essayez d'exécuter un autre .exe à partir de votre code, comme notepad.exe.

System.Process.Start("notepad.exe") 
+0

qui fonctionne bien. son seul FichierMSI – tambo

5

Si vous avez un fichier setup.exe avec votre msi, exécutez-le à la place. Sinon, utilisez ce code:

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

(d'ici: MSI doesn't run from within C#)

La raison pour avoir besoin de le faire de cette façon est que lorsque vous faites System.Process.Start("file.txt") cela fonctionnera, car il est (un peu) appelant notepad.exe %1 qui fonctionnera pour un fichier texte mais msiexec %1 ne fonctionnera pas pour un msi, puisque msiexec a un paramètre requis (Option).

Vous pouvez tester vous-même, en essayant file.msi msiexec sur la ligne de commande - il vous donnera ce petit message utile:

msi without an option

+0

seuil ne fonctionne pas d'autres suggestions – tambo

+0

nProcess = New System.Diagnostics.Process nProcess.StartInfo.FileName = "msiexec" nProcess.StartInfo.Arguments = "/ic:\test.msi" nProcess.Start() – tambo

+0

@ umarali1 si vous tapez 'msiexec/i test.msi' dans votre console, est-ce que cela fonctionne? Si non, quel est le message d'erreur? –

0

eu le même problème. Le problème réside sur la déclaration du chemin du msi. Vous devez mettre des guillemets doubles autour d'elle.

Au lieu de

p.StartInfo.Arguments = "/i PathToYour.msi"

essayer

p.StartInfo.Arguments = "/i ""PathToYour.msi""" 
Questions connexes