1

私は自分のPerlをWindows上のサービスとしてソフト実行しています。

この目的のために、Win32 :: Daemonモジュールを使用してSCM(サービス構成マネージャー)を操作し、サービスを開始/停止します。

サービスを起動するには、system() perlコマンドを使用します。

コマンドは次のようになります。

START \"title\" /Dc:\\path\\to\\bat\\script\\dir\\ \"script.bat\"

このコマンドをcmd.exeから直接起動すると、プロセスのタイトルが適切に設定されています。

開始したサービスを介してコマンドを起動すると、プロセスのタイトルが空になります。タスクマネージャーによると、起動されたコマンドは次のとおりです。

cmd /c ""C:\path\to\script.bat" "

私は何かが足りないのですか?

注:サービスにタイトルを設定しようとしています。これは、サービスの停止フックでタイトル名をパラメーターとして使用して「taskkill」コマンドを起動するよりも、サービスを停止するためのよりクリーンな方法が見つからなかったためです(生成されたプロセスのPIDをキャッチする方法がわからない)

ありがとう。

4

3 に答える 3

3

問題が何であるかは100%わかりませんが、titleコマンドが役立つ場合があります。

Windowsでcmdプロセスを開始すると、デフォルトの未亡人のタイトルが取得されます。DOSの「title」コマンドを使用すると、ウィンドウのタイトルを好きなように設定できます。

DOSの「start」コマンドは、コマンドを新しいウィンドウに分割(フォーク?)するために使用されます。これにより、呼び出し元のDOS / cmdウィンドウからコマンドが分離されます(正しい開始パラメーターを使用して同じウィンドウに保持する場合を除く)。startコマンドの一部は、ウィンドウのタイトルを設定するオプションの「title」パラメーターです。

しかし、サービスとして実行するとおっしゃいましたが...サービスには通常ウィンドウやGUIがないため、ウィンドウのタイトルになぜそれほど興味があるのか​​わかりません。

最後に、あなたは置くことができます

title "The title of the window"

バッチスクリプトで...またはPerlプログラムを使用している場合は、

system "title \"Window title\"";

また動作します。

于 2012-04-19T20:05:48.987 に答える
1

あなたのコマンドを実行してみてください。私の記憶が正しければ、Windowsには2つのコマンドシェルがあります。cmd.exeを使用する場合は、常に新しいコマンドシェルを使用します。

http://ss64.com/nt/cmd.html

cmd.exe /C START \"title\" /Dc:\\path\\to\\bat\\script\\dir\\ \"script.bat\"
于 2012-04-19T15:52:19.790 に答える