2012-07-12 25 views
5

私が作成した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を使用し続けますが、必要に応じて他のツールを調べます。

+0

一時的な解決策として、 2つの更新プログラム(WindowsInstallerとdotNetFx40_Client_x86_x64)を/ norestartフラグを付けて呼び出すバッチスクリプト。これは理想的ではありません。なぜなら、a)このメソッドは、既にインストールされている場合は.Netインストーラの手順を自動的にスキップしません。b)アプリケーションを使用する前に再起動するように通知するメッセージを渡すことはできません。また、好ましくは回避されるcmdウィンドウも作成されます。 –

答えて

2

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

;[email protected]@!UTF-8! 
Title="MyApp Installer" 
ExecuteFile="setup.exe" 
InstallPath="%temp%\\My App" 
;[email protected]@! 

をしかし、この場合には抽出されたファイルは、すべてでは削除されません。たとえば、MSIでこれらのファイルを削除することができます。

PS。お客様がリモートデスクトップセッションを通じてインストーラを実行する場合は、this issue

+0

実際には、7zip 9.20にはこのフラグはありませんが、複数の場所で言及しています(http://sourceforge.net/projects/sevenzip/forums/forum/45798/topic/4626250を参照してください) "7-Zip SFXは" InstallPath "変数をサポートしておらず、ドキュメントからはTitle、BeginPrompt、Progress、RunProgram、Directory、ExecuteFile、およびExecuteParametersだけが使用されます。 私は同様のことをしました。 –

+0

また、リモートデスクトップの問題のヘッドアップに感謝しますが、それは私にとっては問題ではありません。また、プログラムファイル内のアプリの(推定された)ディレクトリにそれを避けるために抽出できるようです。 –

+2

私たちはhttp://7zsfx.info/ja/から修正された7zip SFXを使用しています。これはInstallPathと他の多くのパラメータをサポートしています。 –

2

私はかなり受け入れられる解決策に解決しました。再起動時にsfx tempフォルダ自体が削除されるため、setup.exeではなくバッチファイルを実行します。バッチファイルは、一時に新しいディレクトリに一時ディレクトリにコピーし、すべてを移動し、そこから設定を呼び出す:

::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ノートと同様に問題はありますが、現行のハードドライブと比較してアプリのサイズは許容されます

+0

これは私のために働いた – Sugrue

関連する問題