DOBON.NET DOBON.NETプログラミング掲示板過去ログ

VS2005のセットアッププロジェクトを使用したインストーラーでのエラー

環境/言語:[VS2005 .netframework2.0]
分類:[インストーラ]

いつもお世話になります。

VS2005のセットアッププロジェクトを使用したインストーラーを作成について質問があります。

VS2005で作成したアプリケーションのインストーラーを作成しているのですが、
.NetFramework2.0がない場合、自動でインストールするようにしています。
方法は、セットアッププロジェクトのプロパティで、
必須コンポーネントで、.netframework2.0にチェックをいれ、
「アプリケーションと同じ場所から必須コンポーネントをダウンロードする」
を選択しています。

これらの設定で作成したインストーラー setup.exeを起動してインストールを行うと、
.netframework2.0がない場合(windowsインストーラーもなし)は、.netframework2.0をインストールしてくれるのですが、インストール後に再起動を求められ、
再起動すると、続いてアプリケーションのインストールを行おうとするのですが、
「XXX.msiがみつからない」といったメッセージが表示され、インストールすることができません。

原因は、
setup.exe起動時に、インストールファイルを「local settings\temp」に保存して、
インストール処理を行っているようなのですが、そこにXXX.msiが保存されていないようです。なぜそうなってしまうのがわかりません。

また、インストーラーのパスに日本語が含まれないとうまくインストールできるようです。

@デスクトップにインストーラーをおいて実行するとエラー
ACドライブ直下にインストーラーをおいて実行すると成功

なぜそうなってしまうのか?
また、対処方法をご存知の方がいらっしゃいましたら
ご教授願います!
■No21733に返信(フージーさんの記事)
> 原因は、
> setup.exe起動時に、インストールファイルを「local settings\temp」に保存し>

フォルダ名に空白が含まれているのが悪いとか?
local settings\temp
コマンドラインの場合、空白が含まれるフォルダ名は二重引用符で囲む
必要がありますが、なにか関連するのかしらん。
■No21735に返信(やじゅさんの記事)
> ■No21733に返信(フージーさんの記事)
>>原因は、
>>setup.exe起動時に、インストールファイルを「local settings\temp」に保存し>
>
> フォルダ名に空白が含まれているのが悪いとか?
> local settings\temp
> コマンドラインの場合、空白が含まれるフォルダ名は二重引用符で囲む
> 必要がありますが、なにか関連するのかしらん。

空白が含まれるフォルダと、空白がない日本語を含むフォルダで
インストールを行いました。

結果
@空白が含まれるフォルダでは成功
A空白がない日本語を含むフォルダではエラーとなりました。

この方と同じ現象でした。
http://dobon.net/vb/bbs/log3-27/16433.html

.netframework2.0をインストールするには、windowsインストーラー3.0が必要で
windowsインストーラー3.0がない環境でインストールすると、.netframework2.0と一緒に自動でインストールします。

windowsインストーラー3.0をインストールすると再起動が必要となり、
.netframework2.0インストール後、再起動されます。

なので、windowsインストーラー3.0がすでにインストールされている環境だと、
.netframework2.0後に再起動されず、アプリケーションインストールがうまくいきます。

設定でどうこう直すことは出来なさそうな気がしてきました・・・
日本語がパスに含まれる場合、エラーとなる現象は、
setup.exeのバグ?のようです。
なので直すことはできないとあきらめました。

そこでvs2008では、直っているか確認しようと思い、
vs2008のセットアッププロジェクトでインストーラーを作成しました。

ところが、今度は、
setup.exe起動時に、
「プロシージャエントリポイント HeapSetInformationがダイナミックリンクライブラリ KERNEL32.dll から見つかりませんでした。」
と表示され、起動することができません。

この現象は、WindowsXPでは起きず、Windows2000でエラーとなります。

セットアッププロジェクトは作成時に、.netframework2.0を選択しています。

windows2000で動作するセットアッププロジェクトを作成することはできないのでしょうか?

ご教授願います
インストーラについては詳しくないのですが、

■No21766に返信(フージーさんの記事)
> 「プロシージャエントリポイント HeapSetInformationがダイナミックリンクライブラリ KERNEL32.dll から見つかりませんでした。」

このエラーメッセージから察するに、Kernel32.dllにHeapSetInformationという
関数が存在しないのが原因でしょうね。
そしてWinXPで動いてWin2kで動かないということは、WinXPから追加された関数かもしれないということ。

この関数を調べてみたところ、ビンゴ。WinXPから追加された関数でした。
が、Win2kでもSP4では使えるようなので、今一度手元のWin2000のSPがいくつか
確認してみてください
■No21767に返信(鶏唐揚さんの記事)
> インストーラについては詳しくないのですが、
>
> ■No21766に返信(フージーさんの記事)
>>「プロシージャエントリポイント HeapSetInformationがダイナミックリンクライブラリ KERNEL32.dll から見つかりませんでした。」
>
> このエラーメッセージから察するに、Kernel32.dllにHeapSetInformationという
> 関数が存在しないのが原因でしょうね。
> そしてWinXPで動いてWin2kで動かないということは、WinXPから追加された関数かもしれないということ。
>
> この関数を調べてみたところ、ビンゴ。WinXPから追加された関数でした。
> が、Win2kでもSP4では使えるようなので、今一度手元のWin2000のSPがいくつか
> 確認してみてください

鶏唐揚様
ご回答ありがとうございます。

調べてみたところ
http://support.microsoft.com/kb/816542/ja
にあるように、
ホットフィックスを適用することで、実行できました。
どのKBかはまだ調査していません。

で、VS2008のセットアッププロジェクトで作成したインストーラーで
インストールしたところ、VS2005と同じ現象となりました。

結局、バグは直っておらず、対応は出来ないという結論で、
解決済みとさせていただきます。
解決済み!
> 「プロシージャエントリポイント HeapSetInformationがダイナミック
> リンクライブラリ KERNEL32.dll から見つかりませんでした。」

私も同じところで悩みました。
「Windows 2000 SP4 用の更新プログラム ロールアップ 1」インストール
で解決しそうですよ。

DOBON.NET | プログラミング道 | プログラミング掲示板