1

こんにちは、バッチ ファイル (.bat ファイル) でサーバーにセットアップする Windows サービスを準備しました。また、Uninstall.bat を実行した後、システムから完全に削除できます。Services に myservice はありません。

Setup.exe をクリックすると、次のエラー メッセージが表示されます: エラー 1001 指定されたサービスは既に存在します:

OS から古い Windows サービスを完全に削除する方法。または、このセットアップの問題を解決する方法。私のuninstall.bat exeはうまく機能しています。

4

4 に答える 4

1

説明に基づく私の推測では、サービス (ま​​たはむしろレジストリ キー) が実際に存在するということです。手動で介入しないと、これを回避することはできません。実際にサービスを削除したように見えますが、停止していないように見えます (または停止できません)。

サービスが SCM データベースから削除されたときにサービスがまだ実行されている場合、サービス キーは内部的に削除対象としてマークされます。また、起動時にキーを削除するようにシステムに指示する追加の値がキーに含まれます。システムが正常にシャットダウンされた場合、削除するサービスの内部リンク リストを使用してサービス キーが削除され、システムが再起動する前に削除されます。ただし、システムがクラッシュした場合、キーはブート時および SCM がサービスの起動を開始する前に削除されます。

ここで問題を引き起こしているのは、おそらく内部リンク リストです。SCM API を使用すると、それが実行されるからです。これを回避する 1 つの方法 (私は過去にこれを実行しました) は、戦略的に適切な時点でレジストリ内のキーの名前を変更し、SCM API を使用する代わりに起動時に削除されるように設定することです。


補足: MSI 内では、コード (バッチ ファイルまたはカスタム アクション) を使用する代わりに、常にServiceInstall/ServiceControlとテーブルを使用する必要があります。Registryこれらのアクションはすでに存在しており、順序付けする必要があるだけです。

于 2012-07-13T13:01:37.017 に答える
1

本当に serverfault.com に関する質問ですが、完全に削除するには、HKLM\System\CurrentControlSet\Services の下にあるそのレジストリ キーを削除してください。

理想的には、すべてのサービス操作は、Service Control Manager (SCM) への呼び出しを介して行う必要があります。これは、SC.EXE を介して手動で行うことができます。ただし、アプリがこれを試みたようですので、キーを削除して Windows を再起動してください。

于 2012-07-13T12:27:30.523 に答える
0

方法 1: Setup.exe によって msi ファイルがダウンロードされたディレクトリを見つけます。そして実行..

msiexec /uninstall [path to msi or product code]

方法 2 (SCM を使用):

sc <server> delete [service name]

試してみて、どうなるか教えてください。

于 2012-07-13T20:27:45.337 に答える
0

MSIZAP を使用できます。壊れた msi に関するすべての情報を消去します: http://nerdoftherings.net/wp/?p=66

于 2012-07-13T12:50:02.157 に答える