こんにちわ。
VC++6.0を使用してサービスプロジェクトを作成してみようと思い
ATL COM AppWizardを使い実行ファイルを作ってみました。
そこで標準で作成されるカスタムビルド設定コマンドの意味を教えてください。
以下のコマンドはいったい何をしているのでしょうか?
それとカスタムビルドとは通常のビルドとはどう違うのでしょうか?
よろしくお願いします。
$(TargetPath) /RegServer
echo regsvr32 exec. time > $(OutDir)\regsvr32.trg
echo サーバー登録が完了しました!
それともうひとつ質問があります。
サービスのRun()の部分でShellExecuteを記述してみたのですが
デバッグモード(RegServerモード)で実行するとShellExecuteは実行されファイルも起動する
のですが
サービスとして起動した場合に実行されません。
下記コードは実行ファイルの前後です。
サービスが実行されたらC:\\Log\\Opentest.txtが開くような作りにしたいのです。
※ちなみにサービス状態ではデバッグが不可能なためログ書き出しを行っています。
サービス実行後、ログ書き出しは行われているので一応ShellExecuteの関数は
実行されているようなのですがファイルが起動しません。
この原因がわかる方がいらっしゃいましたら教えてください。
よろしくお願いいたします。
以下Run関数内コード
//ログファイル書き出し
fopen(C:\\Log\\ServiceTestlog.txt,a);
fprintf(fp,ShellExecute前まで実行);
fclose(fp);
//テキスト実行(実行の戻り値、h_ins = 42でした。)
HINSTANCE h_ins = ShellExecute(NULL,open,
C:\\Log\\Opentest.txt,
NULL,NULL,SW_SHOWNORMAL);
//サービスメッセージ待ち
MSG msg;
while (GetMessage(&msg, 0, 0, 0))
DispatchMessage(&msg);
>$(TargetPath) /RegServer
>echo regsvr32 exec. time > $(OutDir)\regsvr32.trg
>echo サーバー登録が完了しました!
コマンドラインでの処理を行います
1行目はサービスアプリケーションの登録
2行目はログ?を出力しているようです
2つ目の質問ですが、
サービスアプリケーション自体のGUIが
表示されていないせいでは?
「デスクトップとの対話をサービスに許可する」
を設定できるフラグがあるはず
ご回答ありがとうございます。
2個目の質問に関してなんですが
確かに「デスクトップとの対話をサービスに許可する」とすることで
実行はできました、しかし初期段階ではチェックが外れていて
それをサービス登録時点で(プログラムで)変更することが出来ないという問題が出てきました。
サービスでEXEを実行したいというのが今回の目的なんですが
なにか良い方法はないでしょうか・・・
よろしくお願いいたします。
サービスを登録している部分
(おそらく、CServiceModule::Install()じゃないかな?)
で、
SC_HANDLE hService = ::CreateService(~)
などと書いてるところがあると思います。
ここでサービスを登録しているので、
4番目の引数に SERVICE_INTERACTIVE_PROCESS を加えれば
できます。
詳しくはMSDNでCreateServiceを調べてください。
tipeさん、たびたびありがとうございます。
実は上の質問をする前にヘルプを読み
第四引数にSERVICE_INTERACTIVE_PROCESSを設定していました。
結果はエラーでサービス自体の登録が出来ませんでした・・・
「加える」ですか、なるほど・・どうもありがとうございました!解決です。