こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

コマンドプロンプトについて教えてください。

コマンドプロンプトについて教えてください。

Msiexec.exe実行でのプログラムのアンインストール

REG DELETEでレジストリの削除

CDでインストール対象のEXEファイルがあるところに移動してEXE実行

という一連の流れを1つのバッチファイルにしたいのですが、処理終了(インストールされていることを確認)すると、なぜか真ん中の処理のレジストリーキーの削除ができてません。
/fオプションで強制削除をつけているはずなのですが…ちなみに、単独で上から実行すると正しくレジストリーキーは削除されております。


何が原因か色々調べましたが、わかりません。処理の間に何か構文が必要なのでしょうか?

なるべくバッチファイルの数を少なくしたいのですが、上記の3つの流れを満たすにはどうすればよいですか?

試しに一番最初のアンインストールの部分を、
Start /w Msiexec.exe~でやってみたのですが、それでもREGdeleteで消したいレジストリーキーはレジストリエディタで確認すると残ってました…

投稿日時 - 2013-11-10 21:26:51

QNo.8342246

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

なんとなくですが、
「CDでインストール対象のEXEファイルがあるところに移動してEXE実行」で
削除したレジストリを作成しているような気がします。

問題の切り分けから始めましょう。

単独削除
CDでインストール対象のEXEファイルがあるところに移動してEXE実行
レジストリ確認

単独削除
Msiexec.exe実行でのプログラムのアンインストール
レジストリ確認

単独削除
Msiexec.exe実行でのプログラムのアンインストール
REG DELETEでレジストリの削除
CDでインストール対象のEXEファイルがあるところに移動してEXE実行
REG DELETEでレジストリの削除
レジストリ確認

というように単品で確認してから複合テストで探すくらいですね。

よろしければ、実際のバッチを確認させていただければ見つかるかも知れません。

インストールは成功しているとのことですから
バッチの構文エラーで、REG DELETEが実行されていない可能性もあります。

投稿日時 - 2013-11-12 00:11:17

ANo.2

Win32アプリのDOSでの実行は、昔からある問題。いまさら、と言う感じです。

まず、検証として、

>REG DELETEでレジストリの削除

この流れで(単独ではなく)、関係ないレジは削除できるのでしょうか。できるのであれば、レジハイブへのアクセスは問題なくでき、「Msiexec.exe」の問題である事がわかる。

No1さんも指摘していますが、「REG DELETE」の動作の報告がありません。よくこの手の質問でありがちな間違いです。エラーといっても他人はエラー内容がわかりません。例えば

>fasdfasdfasdfa > a.txt 2>&1

とすれば、a.txt にエラー出力も、標準出力も出力されます。また「if errorlevel 1 ....」等でエラーレベルの報告も無い。ただ、できた、できない。小学生でもできる報告です。

それと、「Msiexec.exe実行」なんて単純に書いてあるが、本来、DOSではWin32アプリのステータスは取れません。取れる場合もありますよ。と言うのがネットで出ている回避策であり、それらでできないのであれば、別な方法を探索する必要がある。

「Msiexec.exe実行」も実際のオプション指定を記載すべきですね。

例えばLogですが、Logの出力はしたのでしょうか? 最初にすべき事柄ですよね。逆に言えば、そのログから、終了ステータスを拾って、次の実行に生かすなんてこともできますよね。

以上、デバックなど。次に


Win32アプリをDOSからコントロールする方法として、VBS+WMIでの同期、非同期でプロセスを監視、或いはステータスの取得があります。JScript+WMI でもできます。

WMIと言えば、WMIを使用してもアンインストールはできます。これだと、コマンドベースなので、DOS、或いはVBS、或いは JScirptからコントロールが容易にできます。

https://www.google.co.jp/search?hl=ja&q=wmic+product+where+name&lr=lang_ja#hl=ja&lr=lang_ja&psj=1&q=wmic+product+where+name&start=10&tbs=lr:lang_1ja

http://technet.microsoft.com/ja-jp/windowsserver/ff476936.aspx

http://ja.softuses.com/26382

など。WMIC などとDOSコマンドからもできます。問題は、アンインストーラーと競合しないようにすることですね。相手がDOSベースなら、共存も容易にできます。

なお、WSHでも、コマンドプロンプトや、そこでのステータスの取得、あるいはプロセスの監視が可能です。

まず、検証して見て、だめでしたら早めに、これらのオブジェクト指向スクリプトエンジンに移行しましょう。

投稿日時 - 2013-11-11 02:39:29

ANo.1

バッチでレジストリ触るなら、バックアップしてからですね

REG DELETEの行で行うキー操作をテキストファイルにして、
実行ファイル < テキストファイルと記述する。

これが何してるかを確認するには、1行改行のみのファイル(TEST.TXT)を作り
date < test.txt
とやるとわかりやすいかも。

投稿日時 - 2013-11-10 22:38:48

あなたにオススメの質問