テストする小さなスクリプトファイルを作成しました。
これは私の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エラーまたは内部サービスエラーである可能性があります。問題が解決しない場合は、システム管理者に連絡してください。
注:私の場合、Alwaysupまたはウィンドウスケジューラを使用できません。
NSSMの動作は、スクリプトがほぼ瞬時に終了することによって発生します。次のスクリプトを試してください。
echo Hello World
pause
これにより、サービスを開始できるようになりますが、必ずしもコンソールウィンドウが表示されるとは限りません。 「サービスがデスクトップと対話することを許可する」にチェックマークを付けても、対話するのはデスクトップではありません。
SysInternals Process Explorerを使用すると、スクリプトを実行しているCMD子プロセスで実行されているNSSMサービスを確認できます。
Windowsは、セキュリティ機能として「セッションゼロ分離」を実装しており、これにより、サービスがエンドユーザーのデスクトップと対話するのを本質的に防ぎます。
ソリューションに関しては、VisualStudioを使用してWindowsの「サービス」アプリケーションをかなり簡単に作成することができます。これは私の専門分野の範囲外ですが、私が精通しているWindowsアプリケーションに基づくと、通常、デスクトップ操作を提供するためにユーザーモードアプリケーションを実行します。ユーザーモードアプリケーションは、サービスアプリケーションによってホストされているサービスと対話できます。
Windowsサービスは、いくつかの標準イベント(OnStart OnStop、OnPause、OnContinueなど)をサポートする必要がある実行可能プログラムです。 .batファイルは実行可能ファイルではなく、実際にサービスとして実行されることはありません。
Batファイルを実行すると、実行される実際のプログラムはcmd.exeですが、必要なイベントはサポートされていません。
(C++、C#、または他の多くの言語を使用して)Windowsサービスを作成し、cmd.exeでbatファイルを実行するようにサービスをプログラムすることができます。ただし、サービスが画面またはキーボードにアクセスできないため、batファイルは機能しません。
TL; DR:うまくいかないだけです。おそらく、実際に何をしようとしているのかについて別の質問をした場合はどうでしょうか。サービスを解決策と見なしているようですが、問題については説明していません。