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

インストール済みのPCでsetup.exeを起動したときのエラーについて

環境/言語:[C# VS2005 Vista Business/XP Home]
分類:[.NET]

C#でプログラムとインストーラーを作成しました。
このプログラムをすでにインストールしてあるPCでsetup.exeを起動すると通常は
修復か削除を問い合わせるウィンドウが出てくるのですが、
何回かに1回「エラーが発生しました」とエラー終了してしまいます。
"msi"を実行すると「すでにインストール済み」と警告メッセージがでます。

"msi"を使用してインストールすることは避けたいので
(msiで起動すると、
 ・Vistaでは管理者権限の許可が途中から出て、インストールを完了できない。
・Frameworkが未インストールの場合、事前にインストールしたいのでmsiは使えない)

何とかsetup.exeを使用したいのですが、エラーを回避する方法ありませんでしょうか?
せめてエラー時は「インストール済みです」のメッセージを出したいのですが。
2008/02/08(Fri) 15:56:26 編集(投稿者)

■No21446に返信(トリさんの記事)
> C#でプログラムとインストーラーを作成しました。
> このプログラムをすでにインストールしてあるPCでsetup.exeを起動すると通常は
> 修復か削除を問い合わせるウィンドウが出てくるのですが、
> 何回かに1回「エラーが発生しました」とエラー終了してしまいます。
> "msi"を実行すると「すでにインストール済み」と警告メッセージがでます。

エラーダイアログに詳細ボタンとかありますでしょうか。
あれば押したときにメッセージには何が表示されていますでしょうか。

たとえばVistaだと
C:\Users\(User名)\AppData\Local\Temp\

VSDXXXX.tmp\install.log
というフォルダとログファイルができていませんか。

あればinstall.logには何が書いてありますでしょうか。

> 何とかsetup.exeを使用したいのですが

setup.exeの起動でよいと思います。

>何回かに1回

の部分をもう少し明確にはできませんでしょうか。
ありがとうございます。

> エラーダイアログに詳細ボタンとかありますでしょうか。
> あれば押したときにメッセージには何が表示されていますでしょうか。

あります。メッセージは
「xxxをインストールしてエラーが発生しました。」
です。

> たとえばVistaだと
> C:\Users\(User名)\AppData\Local\Temp\
> に
> VSDXXXX.tmp\install.log
> というフォルダとログファイルができていませんか。
>
> あればinstall.logには何が書いてありますでしょうか。

install.logはかなり長いので、恐らくエラーになった個所を抜粋してみました。
------------------------
Launching Application.
Using MsiInstallProduct with package path 'C:\xxx\xxxInstall\xxx.msi' and command line ''
MsiInstallProduct returned '1638'
Error:
--------------------------
"Error:"でログは終っています。

> >何回かに1回
>
> の部分をもう少し明確にはできませんでしょうか。

5−6回に1回くらいです。
結構な頻度なのです。
■No21448に返信(トリさんの記事)
> ------------------------
> Launching Application.
> Using MsiInstallProduct with package path 'C:\xxx\xxxInstall\xxx.msi' and command line ''
> MsiInstallProduct returned '1638'
> Error:
> --------------------------
> "Error:"でログは終っています。
>
>>>何回かに1回
>>
>>の部分をもう少し明確にはできませんでしょうか。
>
> 5−6回に1回くらいです。
> 結構な頻度なのです。

インストーラの中身を変更したのにProductCodeが同じままだからだと思います。
インストーラの中身を変更した場合は
ProductCodeを「新規コード」で変えるとよいのではないでしょうか。
同じものが既に入っていた場合インストール中に「インストール済みです」のメッセージが出ると思います。

要件によっては以下のプロパティを変える必要があるかもしれません。
Versionプロパティ
DetectNewerInstalledVersion プロパティ
RemovePreviousVersions プロパティ

詳しくは
Windows インストーラの配置プロパティ
http://msdn2.microsoft.com/ja-jp/library/seykw6dt(VS.80).aspx
をご参照ください。

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