5

私が作成した Windows アプリケーションの自己解凍型アーカイブを作成しようとしています。私のアプリは最新の .Net 4.0 を使用しており、SFX インストーラーに .Net セットアップを含めたいと考えています。ただし、コンピュータに .Net フレームワークをインストールして再起動する必要がある場合、アプリケーションのインストールが適切に再開されません。Stack サイトの他の sfx の投稿を調べましたが、アプリの前提条件として .Net インストーラーが関係する問題はありません。

私のプロジェクトは 4 つのファイルを生成します。 、私はそれらすべてが標準であると信じています。

次のように、7zip を使用して SFX を作成します。

まず、7zip を使用してすべてのファイルを 1 つのアーカイブに圧縮します。

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

次に、7zS.sfx ファイル (自己解凍型インストーラーの作成に使用)、構成ファイル、およびアーカイブのバイナリ コピーを作成します。構成ファイルは次のとおりです。

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

そして、次の行でそれらをコピーします。

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

インストーラーは、既に .Net 4.0 がインストールされているコンピューターで問題なく動作します。問題は、.Net Framework がインストールされていないコンピューターで発生します。SFX を実行すると、すべてが一時ディレクトリに抽出されます。次に、コンピュータに .Net 4.0 がインストールされていないことを setup.exe が認識すると、.Net インストーラが呼び出されます。これにより、独自の一時ディレクトリに抽出され、インストールが開始されます。完了すると、再起動を求めるプロンプトが表示されます。「いいえ」をクリックすると、インストール全体が終了します。「はい」を押すとマシンが再起動し、再度ログインするとエラーが発生します。

問題は、インストーラーが .Net インストーラーに引き渡し、.Net インストーラーが再起動すると、My App インストール ファイルを含む一時ディレクトリが削除されることです。setup.exe から "App Installer.msi" を使用するように切り替えようとしましたが、これは単純に、コンピューターに .Net がなく、Web ダウンロードを提案する msi を報告することにつながります。オフラインの状況でアプリをインストールする可能性があるため、これは機能しません。

以前に .Net インストーラーを 7zip SFX に含めようとした人はいますか? もしそうなら、どのように解決しましたか? できれば 7zip を使い続けたいと思っていますが、必要に応じて他のツールも検討します。

4

2 に答える 2

2

私はかなり受け入れられると思った解決策に落ち着きました。この問題は、再起動時にsfx tempフォルダーが削除されたことが原因であるため、setup.exeではなくバッチファイルを実行します。バッチファイルは、tempディレクトリ内のすべてをtemp内の新しいディレクトリにコピーし、そこからsetupを呼び出します。

::install.cmd, used to move the setup files to another directory before executing
xcopy /s * ..\MY_APP\
::use start to hide the cmd window
start ..\MY_APP\setup.exe

このフォルダは再起動後も保持され、セットアップを続行できます。sergheiが指摘しているように、これは技術的には問題です。ユーザーが一時ファイルを手動で削除するまで続くためですが、最新のハードドライブと比較した場合のアプリのサイズを考えると許容範囲です。

于 2012-07-13T15:27:52.340 に答える
2

問題は、SFX が setup.exe の終了後に抽出されたファイルを削除することです。これを回避するには、InstallPathパラメータを使用できます。

;!@Install@!UTF-8!
Title="MyApp Installer"
ExecuteFile="setup.exe"
InstallPath="%temp%\\My App"
;!@InstallEnd@!

ただし、この場合、抽出されたファイルはまったく削除されません。たとえば、MSI でこれらのファイルを削除できます。

PS。顧客がリモート デスクトップ セッションを介してインストーラを実行する場合は、この問題も考慮する必要があります。

于 2012-07-13T13:54:14.210 に答える