サービスに関して – プログラミング – Home

通知
すべてクリア

[解決済] サービスに関して


サービス
 サービス
(@サービス)
ゲスト
結合: 22年前
投稿: 6
Topic starter  

こんにちわ。
VC++6.0を使用してサービスプロジェクトを作成してみようと思い
ATL COM AppWizardを使い実行ファイルを作ってみました。

そこで標準で作成されるカスタムビルド設定コマンドの意味を教えてください。
以下のコマンドはいったい何をしているのでしょうか?
それとカスタムビルドとは通常のビルドとはどう違うのでしょうか?
よろしくお願いします。

$(TargetPath) /RegServer
echo regsvr32 exec. time > $(OutDir)\regsvr32.trg
echo サーバー登録が完了しました!


引用未解決
トピックタグ
サービス
 サービス
(@サービス)
ゲスト
結合: 22年前
投稿: 6
Topic starter  

それともうひとつ質問があります。

サービスの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);


返信引用
tipe
 tipe
(@tipe)
ゲスト
結合: 22年前
投稿: 11
 

>$(TargetPath) /RegServer
>echo regsvr32 exec. time > $(OutDir)\regsvr32.trg
>echo サーバー登録が完了しました!

コマンドラインでの処理を行います
1行目はサービスアプリケーションの登録
2行目はログ?を出力しているようです

2つ目の質問ですが、
サービスアプリケーション自体のGUIが
表示されていないせいでは?
「デスクトップとの対話をサービスに許可する」
を設定できるフラグがあるはず


返信引用
サービス
 サービス
(@サービス)
ゲスト
結合: 22年前
投稿: 6
Topic starter  

ご回答ありがとうございます。

2個目の質問に関してなんですが
確かに「デスクトップとの対話をサービスに許可する」とすることで
実行はできました、しかし初期段階ではチェックが外れていて
それをサービス登録時点で(プログラムで)変更することが出来ないという問題が出てきました。

サービスでEXEを実行したいというのが今回の目的なんですが
なにか良い方法はないでしょうか・・・

よろしくお願いいたします。


返信引用
tipe
 tipe
(@tipe)
ゲスト
結合: 22年前
投稿: 11
 

サービスを登録している部分
(おそらく、CServiceModule::Install()じゃないかな?)
で、
SC_HANDLE hService = ::CreateService(~)
などと書いてるところがあると思います。
ここでサービスを登録しているので、
4番目の引数に SERVICE_INTERACTIVE_PROCESS を加えれば
できます。
詳しくはMSDNでCreateServiceを調べてください。


返信引用
サービス
 サービス
(@サービス)
ゲスト
結合: 22年前
投稿: 6
Topic starter  

tipeさん、たびたびありがとうございます。

実は上の質問をする前にヘルプを読み
第四引数にSERVICE_INTERACTIVE_PROCESSを設定していました。
結果はエラーでサービス自体の登録が出来ませんでした・・・

「加える」ですか、なるほど・・どうもありがとうございました!解決です。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました