私が作成したWindowsアプリケーションの自己解凍アーカイブを作成しようとしています。私のアプリは最新の.Net 4.0を使い、SFXインストーラに.Netの設定を含めたいと思う。ただし、コンピュータが.Netフレームワークをインストールして再起動する必要がある場合、アプリケーションのインストールが適切に再開されません。私はスタックサイト上の他のsfx投稿を見てきましたが、それらのどれもアプリの前提条件として.Netインストーラが関わる問題はありません。7zip自己解凍アーカイブ(SFX)と.Netインストーラ
私のプロジェクトでは、「App Installer.msi」「setup.exe」「WindowsInstaller-KB893803-v2-x86.exe」(フォルダ「WindowsInstaller3_1」)と「dotNetFx40_Client_x86_x64.exe」(フォルダ内"DotNetFX40Client")、私はすべてが標準だと信じています。
私は次のようにSFXを作成するために、7zipをを使用します。
7z.exe a -r AppInstallFiles.7z *
次に、私は7zSでバイナリコピーを実行します。1つのアーカイブにすべてのファイルを圧縮する7zipをを使用し、
ファーストを.sfxファイル(自己解凍インストーラの作成に使用)、設定ファイル、およびアーカイブ。
;[email protected]@!UTF-8!
Title="MyApp Installer"
ExecuteFile="setup.exe"
;[email protected]@!
そして、私はラインでそれらをコピーします:設定ファイルは以下のとおりである
copy /b 7zS.sfx + config.txt + AppInstallFiles.7z MyAppInstaller.exe
インストーラは、すでに私の問題.NET 4.0を持っているコンピュータ上で完璧に動作していないコンピュータ上で発生します.Net Frameworkを持っている - 私はSFXを実行し、すべてをtempディレクトリに抽出します。次に、setup.exeがコンピュータに.Net 4.0がないことを認識すると、.NETインストーラを呼び出します。これは、独自のtempディレクトリに抽出し、インストールを開始します。完了すると、再起動を促すプロンプトが表示されます。 「いいえ」を押すとインストール全体が終了します。 「はい」を押すとマシンが再起動され、再度ログインするとエラーが表示されます。「アプリケーションファイルを見つけることができませんでした.App Installer.msi」の詳細を「MyAppのインストール中にエラーが発生しました」
問題は、インストーラが.Netインストーラに手を差し伸べて、.Netインストーラが再起動したとき、My Appのインストールファイルを含むtempディレクトリが削除されたことです。setup.exeから "App Installer.msi"しかし、これは単に、コンピュータに.Netがなく、Webダウンロードを提案していることをmsiが報告することにつながります。オフラインでアプリケーションをインストールしている可能性があるので、これはうまくいかないでしょう。
前に.NETインストーラを7zip SFXに含めるにはどうすればいいですか?可能であれば7zipを使用し続けますが、必要に応じて他のツールを調べます。
一時的な解決策として、 2つの更新プログラム(WindowsInstallerとdotNetFx40_Client_x86_x64)を/ norestartフラグを付けて呼び出すバッチスクリプト。これは理想的ではありません。なぜなら、a)このメソッドは、既にインストールされている場合は.Netインストーラの手順を自動的にスキップしません。b)アプリケーションを使用する前に再起動するように通知するメッセージを渡すことはできません。また、好ましくは回避されるcmdウィンドウも作成されます。 –