これはsc.exeについてです
プログラムをWindowsのサービスとして実行したい。コマンドプロンプトを使用して実行できます
私のプログラムはsystem32
フォルダーに配置されているので、最初にsystem32
に移動してから、これらのコマンドを使用します
c:\windows\system32>sc create demo binpath= "pg.exe" type= own start= auto DisplayName= "autostart"
c:\windows\system32>sc config demo binpath= "cmd.exe /c c:\windows\system32>pg.exe" type= own start= auto DisplayName= "autostart"
これらのコマンドを実行した後、PCを再起動すると、プログラムは正常なサービスとして実行を開始します。
ここで、これらのコマンドを実行するautoitスクリプトを作成したいのですが、その方法を理解できません。
私はこれを試しました
#include <RunCMD.au3>
$cmd = "sc create demo1 binpath= c:\pg.exe type= own start= auto"
_RunCMD($cmd)
$cmd = "sc config demo1 binpath= "cmd.exe /c c:\pg.exe" type= own start= auto"
_RunCMD($cmd)
最初のコマンドは正常に実行されますが、2番目のコマンドは実行されません。
AutoIT Run 関数を使用して、 Run 関数を使用して外部プログラムを実行\実行できます。以下は、指定したロジックの例です。
#RequireAdmin
Run('sc create demo1 binpath= c:\pg.exe type= own start= auto')
Run('sc config demo1 binpath= "cmd.exe /c c:\pg.exe" type= own start= auto')
_ RunCMD関数スニペット で2番目のコマンドを期待どおりに実行する際に発生する可能性のある問題は、二重引用符が使用されているためです設定されている変数の値の周囲および範囲内。
変数の実際の値には二重引用符が含まれているため、二重引用符ではなく、変数値を一重引用符で囲む例を次に示します。
$cmd = 'sc config demo1 binpath= "cmd.exe /c c:\pg.exe" type= own start= auto'
ComSpecをご覧ください https://www.autoitscript.com/wiki/Snippets_%28_CMD_%29
エスケープ文字があるため、構文は少し注意が必要ですが、それは可能です。
また、一部のコマンドラインをAutoITの組み込み関数に置き換えることができる場合もあります。
CMDコマンドは、Windowsバッチファイルから実行するのが最適です。バッチファイル内のコマンドを使用して起動時に実行するようにバッチファイルを設定すると、問題なく機能するはずです。
バッチファイルが起動時にフォルダに入ると、実行されてコマンドが実行されます。
バッチファイルの形式:
@echo off
(your command)
(your command)
exit
それでもうまくいかない場合は、スタートアップフォルダを試してみてください。