web-dev-qa-db-ja.com

NSSMを使用してウィンドウ10でサービスを開始できません

テストする小さなスクリプトファイルを作成しました。

これは私のscript.batファイルです。

sc create myService binpath= C:\Users\Admin\Desktop\test.bat start= auto 

これは私のtest.batファイルです。

echo "Welcome to Wizard"

問題の説明

コントロールパネルサービスセクションからサービスを開始できません。

次のエラーが発生します。

[SC] StartService FAILED 1053:サービスが開始要求または制御要求にタイムリーに応答しませんでした。

それが私がnssmを使用している理由です。

これで、PowerShellで次のコマンドを実行するとどうなりますか

。\ nssm install myService、ダイアログボックスが表示されます。スクリプトファイルのパスを指定して、インストールサービスをクリックします。

サービスのインストールが成功した後。コントロールパネルに移動します->サービス->開始をクリックしますmyService一時停止し、次のダイアログボックスが表示されます

WindowsはローカルコンピュータでmyServiceサービスを開始できませんでした。サービスはエラーを返しませんでした。これはWindowsエラーまたは内部サービスエラーである可能性があります。問題が解決しない場合は、システム管理者に連絡してください。

  1. どうすればこれを修正できますか?
  2. 手動の手順を実行せず、サードパーティのツールを使用せずにそれを行う他の方法はありますか?.
  3. 私はこれをすべてウィンドウ10で実行しています。このタスクを実行するためにサーバーが必要ですか?

注:私の場合、Alwaysupまたはウィンドウスケジューラを使用できません。

2
miki

NSSMの動作は、スクリプトがほぼ瞬時に終了することによって発生します。次のスクリプトを試してください。

echo Hello World
pause

これにより、サービスを開始できるようになりますが、必ずしもコンソールウィンドウが表示されるとは限りません。 「サービスがデスクトップと対話することを許可する」にチェックマークを付けても、対話するのはデスクトップではありません。

SysInternals Process Explorerを使用すると、スクリプトを実行しているCMD子プロセスで実行されているNSSMサービスを確認できます。

Windowsは、セキュリティ機能として「セッションゼロ分離」を実装しており、これにより、サービスがエンドユーザーのデスクトップと対話するのを本質的に防ぎます。

ソリューションに関しては、VisualStudioを使用してWindowsの「サービス」アプリケーションをかなり簡単に作成することができます。これは私の専門分野の範囲外ですが、私が精通しているWindowsアプリケーションに基づくと、通常、デスクトップ操作を提供するためにユーザーモードアプリケーションを実行します。ユーザーモードアプリケーションは、サービスアプリケーションによってホストされているサービスと対話できます。

2
andyb

Windowsサービスは、いくつかの標準イベント(OnStart OnStop、OnPause、OnContinueなど)をサポートする必要がある実行可能プログラムです。 .batファイルは実行可能ファイルではなく、実際にサービスとして実行されることはありません。

Batファイルを実行すると、実行される実際のプログラムはcmd.exeですが、必要なイベントはサポートされていません。

(C++、C#、または他の多くの言語を使用して)Windowsサービスを作成し、cmd.exeでbatファイルを実行するようにサービスをプログラムすることができます。ただし、サービスが画面またはキーボードにアクセスできないため、batファイルは機能しません。

TL; DR:うまくいかないだけです。おそらく、実際に何をしようとしているのかについて別の質問をした場合はどうでしょうか。サービスを解決策と見なしているようですが、問題については説明していません。

1
simon at rcl