7-zip Archive Auto-Extractible (SFX) et .Net Programme D'Installation

Je suis en train de créer une archive auto-extractible pour une application windows j'ai écrit. Mon application utilise la dernière .Net 4.0, et je veux inclure l' .Net le programme d'installation dans le SFX programme d'installation. Toutefois, si l'ordinateur a besoin pour installer le .Net framework et le redémarrage, il ne sera pas correctement reprendre l'installation de mon application. J'ai regardé à travers les autres sfx postes sur la Pile des sites, mais aucun d'entre eux sont des problèmes impliquant .Net installer en tant que condition préalable à l'application.

Mon projet produit 4 fichiers: "Application à Installer.msi" "setup.exe" "WindowsInstaller-KB893803-v2-x86.exe" (dans le dossier "WindowsInstaller3_1") et "dotNetFx40_Client_x86_x64.exe" (dans le dossier "DotNetFX40Client"), je crois que c'est la norme.

- Je utiliser 7zip pour créer le SFX comme suit:

Tout d'abord, utilisez 7-zip pour compresser tous les fichiers en une seule archive:

7z.exe a -r AppInstallFiles.7z *

Ensuite, je fais une copie binaire avec le 7zS.fichier sfx (utilisé pour créer un installeur auto-extractible), mon fichier de config, et de l'archive. Le fichier de configuration est comme suit:

;!@Install@!UTF-8!
Title="MyApp Installer"
ExecuteFile="setup.exe"
;!@InstallEnd@!

Et je copie avec la ligne:

copy /b 7zS.sfx + config.txt + AppInstallFiles.7z MyAppInstaller.exe

Le programme d'installation fonctionne parfaitement sur les ordinateurs qui ont déjà .Net 4.0 Mon problème se pose sur les ordinateurs qui n'ont pas d' .Net Framework - je exécuter le SFX, il extrait le tout à un répertoire temp. Puis, quand setup.exe reconnaît que l'ordinateur n'a pas .Net 4.0, il appelle la .Net Programme D'Installation. Cette extrait de son propre répertoire temp et commence l'installation. À la fin, il demande de redémarrer l'ordinateur. La touche "N" pour quitter l'installation complète. Appuyer sur "Oui" redémarre l'ordinateur, et sur de vous connecter à nouveau il y a une erreur: "Une erreur s'est produite en essayant d'installer MyApp" avec les détails des "Impossible de localiser le fichier de l'application App Installer.msi'

Il semble que le problème est, quand le programme d'installation de mains hors de l' .Net programme d'installation, et la .Net programme d'installation redémarre, la temp répertoire contenant l'une de Mes applications installer les fichiers est supprimé. J'ai essayé de commutation de setup.exe à l'aide de l'Application de l'Installateur.msi," cependant, cela conduit simplement à la msi rapports que l'ordinateur n'a pas .Net et suggérant un téléchargement sur le web. Comme je l'ai peut être l'installation de l'application en mode hors connexion des situations, cela ne fonctionne pas pour moi.

Quelqu'un d'autre a essayé d'inclure l' .Net programme d'installation avant dans un 7-zip SFX, et si oui, comment ont-ils résoudre? Je préfère le garder à l'aide de 7zip si possible, mais que d'autres outils si nécessaire.

Donc, comme une solution temporaire, j'ai créé un script batch qui appelle les deux mises à jour (WindowsInstaller et dotNetFx40_Client_x86_x64) avec la / / norestart drapeau. Ce n'est pas idéal, parce que a) cette méthode n'est pas automatiquement sauter le .Net programme d'installation étape si sa déjà installé, et b) je ne peux pas passer un message informant l'utilisateur de redémarrer avant d'utiliser l'Application. Il crée également une fenêtre de commande, qui doit de préférence être évitée.

OriginalL'auteur L.J. | 2012-07-12