- PR -

.NET Framework の再配布(Setup.exe Bootstrapper)

投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-02-26 08:41
では、main.cppに、次のトラップを仕掛けてください。

最初の方、「#include」の直後に、
コード:

#define MSGBuffer 128
#define FmtMessage(ERR, MSG, LEN)
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
NULL, (ERR), GetSystemDefaultLangID(),
(MSG), (LEN), NULL)
↑2つめのdefineは、このページを読みやすくするために複数行にしましたが、
↑打ち込むときには1行にしてください。


121行目のCErrorの直前に、
コード:

char ErrMessage[MSGBuffer + 1];
(void) FmtMessage(dwResult, ErrMessage, MSGBuffer);


これで、FmtMessageにブレークポイントを張り、止まったら1行実行/ステップオーバーします。そうすると、ErrMessageにエラー番号3のエラーメッセージが入ります。これで対処できると思います。

[ メッセージ編集済み 編集者: Jitta 編集日時 2003-02-26 08:44 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-02-26 09:13
 すみません、わかりました。

 VS.NETをインストールしたディレクトリの、"Vc7\PlatformSDK\include"というディレクトリに、"error.h"というファイルがあります(Vc7\includeではないのね(^^; )。ここに、エラーが定義されていて、3は「ERROR_PATH_NOT_FOUND」(パスが見つかりません)と、なっています。

 とりあえず、setting.iniファイルの[BOOTSTRAP]セクション、「MSI」を、絶対パスで書いてみてください。それから、実行パスのアクセス権を調べてみてください。
sugimoto
常連さん
会議室デビュー日: 2002/12/05
投稿数: 45
投稿日時: 2003-02-26 09:29
申し訳ありません。

C++.NETについてよく理解してませんでした。
MSIの指定を

MSI=work\setup.msi
から
MSI=Debug\work\setup.msi

にすると、ここのエラーはでなくなりました。
setup.exeがDebugフォルダの中にあるので、
上記の書き方で良いと思ってました・・・

本当は、197行目で起こっているようです。

ここのdwResultは「4104」になっていました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-02-26 14:24
 4104ですが、システムのエラーには登録されていませんでした。それで、bootsptaperのディレクトリをgrepすると、SetupCodes.hで、「Framework (PackageType, Version) pair is already installed」と、定義されていました。

 .NET Frameworkをアンインストールするか、インストールされていない環境で試してみてください。


しかし、すでにインストールされているからといってエラーになるのはおかしいしと思うので、少しいじりましょう。
 175,176行目を表示してください(IDEの右下、行番号が書いてるところをダブルクリックすると、行移動ができます)。if文がありますが、次のように書き換えます。
if ( ERROR_SUCCESS_REBOOT_REQUIRED == dwResult ||
ERROR_SUCCESS == dwResult || COR_FRAMEWORK_EXIST == dwResult )

これで、フレームワークがインストール済みの場合でもエラーになりません。

[ メッセージ編集済み 編集者: Jitta 編集日時 2003-02-26 14:35 ]
sugimoto
常連さん
会議室デビュー日: 2002/12/05
投稿数: 45
投稿日時: 2003-02-26 15:10
デバッグ環境にて、.NET Frameworkをアンインストールしデバッグすると、
正常に動作しました。

この setup.exe Bootstrapper は、.NET Framework がインストールされてたら、
.NET Frameworkのインストールを飛ばして、MSIのインストーラーを起動
してくれるのかと思っていたのですが、勘違いだったのでしょうか???

# でも一度、.NET Framework のインストールされていないマシンで実行したとき
# .NET Framework インストール後にこけてたのは、なんだったんだろう?
# これも勘違い???
sugimoto
常連さん
会議室デビュー日: 2002/12/05
投稿数: 45
投稿日時: 2003-02-26 15:14
すいません。

編集済みのレス見るのが遅れました。

さっそく試してみます。
sugimoto
常連さん
会議室デビュー日: 2002/12/05
投稿数: 45
投稿日時: 2003-02-26 16:26
ありがとうございます。
下記の if文を追加すると、.NET Framework がインストール済みでも
正常に動作することを確認いたしました。

引用:


 175,176行目を表示してください(IDEの右下、行番号が書いてるところをダブルクリックすると、行移動ができます)。if文がありますが、次のように書き換えます。
if ( ERROR_SUCCESS_REBOOT_REQUIRED == dwResult ||
ERROR_SUCCESS == dwResult || COR_FRAMEWORK_EXIST == dwResult )



もう一つ、お聞きしたいことがあるのですが、ソースコードダウンロード時に出てくる
ダイアログ(ブラウザによって表示されないみたいです)に書かれているものを
見るかぎり、自作アプリとセットで配布すれば大丈夫のようですが、
英語で書かれてあるため、少し自信が持てません。

この少しいじられた setup.exe bootstrapper sample を配布しても大丈夫でしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-02-27 09:43
引用:

sugiさんの書き込み (2003-02-26 16:26) より:

もう一つ、お聞きしたいことがあるのですが、ソースコードダウンロード時に出てくる
ダイアログ(ブラウザによって表示されないみたいです)に書かれているものを
見るかぎり、自作アプリとセットで配布すれば大丈夫のようですが、
英語で書かれてあるため、少し自信が持てません。

この少しいじられた setup.exe bootstrapper sample を配布しても大丈夫でしょうか?


 Operaでは出てきませんでした(笑)。

 少し読んでみましたが、『個人向け』とあるので、個人として自作アプリケーションの配布のために使用する分にはかまわないようです。翻訳サービスなどを使うか、法人としてならMSに直接問い合わせるほうがよいでしょう。

スキルアップ/キャリアアップ(JOB@IT)