- 締切済み
SYSTEM権限でプロセス機動
いつもお世話になっております。 ただ今仕事で業務アプリを開発しているのですが、題記の件で立ち往生しております。 有識者の方がいらっしゃいましたら、ご教授いただければ幸いです。 【やりたいこと】 Windows2000Server,及びWindowsServer2003上でアプリを実装したときに、 ログオフでアプリケーションを殺さないようにする。 【経緯】 WindowsServer2008対応にて、今までセッション0でダイアログ表示を 行っていたアプリをユーザセッションに表示するように変更しました。 その際にUIを行うプロセスを新たに起動(CreateProcessAuUser()を用いて) するようにしたのですが、このUIを起動するとログインユーザ(Administrator権限) になってしまいます。 タスクマネージャ上でユーザがSYSTEMになっているプロセスは ログオフ後にログインしなおすとそのままアプリが残っているのに対し、 UIプロセスはWindowsによって異常終了してしまいます。 このことから、SYSTEM権限でプロセスを起動すれば良いのではないか? っと考えたのですが、はたして可能なのでしょうか? ・サービスプログラムからの起動 ・ATコマンドを使用して起動 ・スクリプト起動?(すいません、これはイマイチ分かっていません) 上記の場合にはSYSTEMになるということはわかったのですが、 SYSTEMで起動しているプロセスから起動することは可能なのでしょうか。 もし可能な場合どのように起動すればよいのかを教えていただきたく、よろしくお願いいたします。 尚、WindowsServer2008上ではプロセスが死ぬことは仕様としてあるのですが、 過去バージョンと同等機能(ログオフしてもプロセスが生きている)を維持しなくてはならないため、 本件のような仕様になっています。 どうぞよろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
お礼
アドバイスありがとうございます。 今回の仕様は、明らかにおかしいのは重々承知しているのですが、 修正規模を考慮した上でこのような仕様になってしまいました。 元々基盤となるプロセスがSYSTEMユーザでセッション0に 実行されていたため、ログオフ後に再度ログインしても ダイアログの表示が継続されていました。 この点で既に設計不良だと思うのですが、 何分7,8年前に開発されたまま運用されているため、 外部仕様の変更ができなかったのです。 >可能です。CreateProcess/CreateProcessAsUserなどで とありますが、CreateProcessでは実行できたのですが (OSごとに処理を分けました)、CreateProcessAsUserで実行する場合には 何か特別な設定があるのでしょうか? ユーザトークンを取得し、プライマリトークンの複製、 環境ブロックのセットと一通りやったつもりでいたのですが ”サービスのローカルシステムアカウントにおいて”の設定は どこに関係してくるのでしょうか。 もし良ければご教授いただければ幸いです。 当初、セキュリティ記述子に何を設定して良いか分からず、 サービスプログラムの情報からセキュリティー情報をコピー してくるという無茶苦茶なこともやってみました…。 あと >シャットダウン通知の処理が従来と異なるようなので注意が 必要です。 まさに今これでつまづいています。 WinProcの設定がおかしいのかWM_QUERYENDSESSIONを拾うことができません。 (他のイベントは拾えてるのでプロシージャそのものは起動できているっぽいのですが) aris-wizさんがおっしゃってるのはこの点でしょうか…? もしご存じでしたら教えていただけると幸いです。 色々と不勉強で申し訳ありません。どうもありがとうございました。