J'utilise ce code pour renvoyer un FileContentResult avec un fichier MSI pour l'utilisateur de télécharger dans mon contrôleur ASP.NET MVC:ASP.NET MVC: Un fichier MSI peut-il être renvoyé via FileContentResult sans rompre le package d'installation?
using (StreamReader reader = new StreamReader(@"c:\WixTest.msi"))
{
Byte[] bytes = Encoding.ASCII.GetBytes(reader.ReadToEnd());
return File(bytes, "text/plain", "download.msi");
}
Je peux télécharger le fichier, mais lorsque je tente de lancer le programme d'installation, je reçois un message d'erreur disant:
Ce package d'installation n'a pas pu être ouvert . Contactez le fournisseur de l'application pour vérifier qu'il s'agit d'un package d'installation Windows valide.
Je sais que le problème n'est pas C: \ WixTest.msi, car il s'exécute très bien si j'utilise la copie locale. Je ne pense pas que j'utilise le mauvais type MIME, parce que je peux obtenir quelque chose de similaire en utilisant simplement File.Copy et en retournant le fichier copié via un FilePathResult (sans utiliser StreamReader) qui fonctionne correctement après le téléchargement.
Je dois utiliser le FileContentResult, cependant, afin que je puisse supprimer la copie du fichier que je fais (ce que je peux faire une fois que je l'ai chargé en mémoire).
Je pense que j'invalide le paquet d'installation en copiant ou en encodant le fichier. Est-il possible de lire un fichier MSI en mémoire et de le renvoyer via un FileContentResult sans corrompre le package d'installation?
Solution:
using (FileStream stream = new FileStream(@"c:\WixTest.msi", FileMode.Open))
{
BinaryReader reader = new BinaryReader(stream);
Byte[] bytes = reader.ReadBytes(Convert.ToInt32(stream.Length));
return File(bytes, "application/msi", "download.msi");
}
Ça a bien fonctionné. Merci! –