0

dll を取得して特定の場所に抽出するインストール プロジェクト (.VDProject / 展開プロジェクト) を受け取りました。
私の目標は、インストール/アンインストールの最後にファイルを適切な場所にコピーして、特定のWindowsサービスを再起動することです。

これを行う適切な方法は何ですか? 「カスタム アクション」の「コミット」および「アンインストール」セクションの VBS によって ?

このスクリプトは機能しません:

Set oshell = createobject("Wscript.Shell")
oshell.run"cmd.exe"
wscript.sleep 500
oshell.sendkeys "net stop ""MyService"""+("{Enter}")
wscript.sleep 5000
oshell.sendkeys "net start ""MyService"""+("{Enter}")
wscript.sleep 5000
oshell.sendkeys "exit"+("{Enter}")

set oshell = nothing

WScript.Quit
4

1 に答える 1

1

あなたはVDPROJとどのくらい結婚していますか? 率直に言って、それはひどいので、VS2012でMicrosoftによって殺されました。

サービスを停止および開始する正しい方法は、ServiceControl テーブルを使用することです。悲しいことに、VDPROJ はこのテーブルを公開していません (それがいかに悪いかを数えさせてください)。

VBScript/JScript カスタム アクションは壊れやすいことで知られています。また、プロセスから外れており、車輪 (ServiceControl) を再発明しています。

インストールまたはポリシーによってロールバックが無効になっている場合、コミット カスタム アクションは実行されません。

遅延カスタム アクションは必要な場所ですが、ご想像のとおり、VDPROJ ではそのような制御はできません。

1 つの手法は、WiX マージ モジュールを作成して ServiceControl 要素をカプセル化し、それを VDPROJ にマージすることです。これは、私がブログで紹介しているテクニックです。この例では、ServiceControl 要素を使用しますが、ServiceInstall 要素は使用しません。

また、ORCA を使用して ServiceControl テーブルを含む静的変換を作成し、ビルド後のイベントの一部として VDPROJ ビルド MSI に適用することもできます。

とにかく、私が言ったように. VDPROJ とどのくらい結婚していますか? これらはすべて、そのツールの恐ろしさを回避するためのハックです。代わりに、WiX で完全に移行する方が理にかなっているかもしれません。

于 2013-02-06T18:52:26.403 に答える