- 締切済み
コマンドプロンプトについて教えてください。
コマンドプロンプトについて教えてください。 Msiexec.exe実行でのプログラムのアンインストール ↓ REG DELETEでレジストリの削除 ↓ CDでインストール対象のEXEファイルがあるところに移動してEXE実行 という一連の流れを1つのバッチファイルにしたいのですが、処理終了(インストールされていることを確認)すると、なぜか真ん中の処理のレジストリーキーの削除ができてません。 /fオプションで強制削除をつけているはずなのですが…ちなみに、単独で上から実行すると正しくレジストリーキーは削除されております。 何が原因か色々調べましたが、わかりません。処理の間に何か構文が必要なのでしょうか? なるべくバッチファイルの数を少なくしたいのですが、上記の3つの流れを満たすにはどうすればよいですか? 試しに一番最初のアンインストールの部分を、 Start /w Msiexec.exe~でやってみたのですが、それでもREGdeleteで消したいレジストリーキーはレジストリエディタで確認すると残ってました…
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- RURUFOU
- ベストアンサー率55% (5/9)
なんとなくですが、 「CDでインストール対象のEXEファイルがあるところに移動してEXE実行」で 削除したレジストリを作成しているような気がします。 問題の切り分けから始めましょう。 単独削除 CDでインストール対象のEXEファイルがあるところに移動してEXE実行 レジストリ確認 単独削除 Msiexec.exe実行でのプログラムのアンインストール レジストリ確認 単独削除 Msiexec.exe実行でのプログラムのアンインストール REG DELETEでレジストリの削除 CDでインストール対象のEXEファイルがあるところに移動してEXE実行 REG DELETEでレジストリの削除 レジストリ確認 というように単品で確認してから複合テストで探すくらいですね。 よろしければ、実際のバッチを確認させていただければ見つかるかも知れません。 インストールは成功しているとのことですから バッチの構文エラーで、REG DELETEが実行されていない可能性もあります。
- lupin-333333
- ベストアンサー率31% (294/933)
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でも、コマンドプロンプトや、そこでのステータスの取得、あるいはプロセスの監視が可能です。 まず、検証して見て、だめでしたら早めに、これらのオブジェクト指向スクリプトエンジンに移行しましょう。
- bin-chan
- ベストアンサー率33% (1403/4213)
バッチでレジストリ触るなら、バックアップしてからですね REG DELETEの行で行うキー操作をテキストファイルにして、 実行ファイル < テキストファイルと記述する。 これが何してるかを確認するには、1行改行のみのファイル(TEST.TXT)を作り date < test.txt とやるとわかりやすいかも。