
いつもお世話になっております。
ただ今仕事で業務アプリを開発しているのですが、題記の件で立ち往生しております。
有識者の方がいらっしゃいましたら、ご教授いただければ幸いです。
【やりたいこと】
Windows2000Server,及びWindowsServer2003上でアプリを実装したときに、
ログオフでアプリケーションを殺さないようにする。
【経緯】
WindowsServer2008対応にて、今までセッション0でダイアログ表示を
行っていたアプリをユーザセッションに表示するように変更しました。
その際にUIを行うプロセスを新たに起動(CreateProcessAuUser()を用いて)
するようにしたのですが、このUIを起動するとログインユーザ(Administrator権限)
になってしまいます。
タスクマネージャ上でユーザがSYSTEMになっているプロセスは
ログオフ後にログインしなおすとそのままアプリが残っているのに対し、
UIプロセスはWindowsによって異常終了してしまいます。
このことから、SYSTEM権限でプロセスを起動すれば良いのではないか?
っと考えたのですが、はたして可能なのでしょうか?
・サービスプログラムからの起動
・ATコマンドを使用して起動
・スクリプト起動?(すいません、これはイマイチ分かっていません)
上記の場合にはSYSTEMになるということはわかったのですが、
SYSTEMで起動しているプロセスから起動することは可能なのでしょうか。
もし可能な場合どのように起動すればよいのかを教えていただきたく、よろしくお願いいたします。
尚、WindowsServer2008上ではプロセスが死ぬことは仕様としてあるのですが、
過去バージョンと同等機能(ログオフしてもプロセスが生きている)を維持しなくてはならないため、
本件のような仕様になっています。
どうぞよろしくお願いいたします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
> ”サービスのローカルシステムアカウントにおいて”の設定は
> どこに関係してくるのでしょうか。
サービスAPから起動されたアプリは通常SYSTEM権限を持ちます。
ローカルシステムアカウントにおいて起動する==SYSTEM権限で
起動すると読み替えていただいて差し支えないと思います。
> CreateProcessAsUserで実行する場合には
> 何か特別な設定があるのでしょうか?
> 当初、セキュリティ記述子に何を設定して良いか分からず、
SYSTEM権限で実行されたAPの呼び出し側スレッドが既に
ログオンしているユーザトークンのセキュリティコンテキストを
偽装できるようにする必要があります。
> WM_QUERYENDSESSIONを拾うことができません。
> aris-wizさんがおっしゃってるのはこの点でしょうか…?
Yesです。。。
Session 0 でのシャットダウンメッセージや
メッセージ配信の挙動が若干変わったようです。
シャットダウンについての違いは以下を見れば大体わかるかと。
http://msdn.microsoft.com/en-us/library/bb394721 …
メッセージ配信、自体はCreateProcessAsUserを使用して、
作成した偽装トークを指定することで、メッセージ自体は
受け取るようにすることが可能なようですが、
シャットダウンのキャンセルは上記URLのように、
かなりシビアになっているようです。。。
ついでにサービスAPにもシャットダウンの予測機能が
少し追加されたようです。。。
[原文]http://msdn.microsoft.com/en-us/magazine/cc16425 …
No.2
- 回答日時:
>ログオフでアプリケーションを殺さないようにする。
そもそも、ログオンされたセッションから起動された
アプリケーションをそのセッション自体が終わるときに
終了しないというのが無理な話だと思います。
# UIを持つアプリケーションがユーザセッション終了中に
# 継続して起動しておかなければならない理由わからないのですが
# 運用互換維持の為だけなのでしょうか?
>SYSTEMで起動しているプロセスから起動は可能なのでしょうか。
可能です。CreateProcess/CreateProcessAsUserなどで
起動できます。
ユーザセッション以外の監視目的がある場合、
基本的にサービスのローカルシステムアカウントにおいて
行うのが通例だと思います。
ただし、No1さんもおっしゃっているとおり、
サービスからGUIをもつアプリケーションを
起動する場合はディスクトップ対話を許可しなければ、
起動されたアプリケーションのUIを表示することができません。
> 2008
2008ではデスクトップの対話を許可してセッション0で起動しても、
隔離されたデスクトップに単独で表示される為動作が若干異なります
また、シャットダウン通知の処理が従来と異なるようなので注意が
必要です。
アドバイスありがとうございます。
今回の仕様は、明らかにおかしいのは重々承知しているのですが、
修正規模を考慮した上でこのような仕様になってしまいました。
元々基盤となるプロセスがSYSTEMユーザでセッション0に
実行されていたため、ログオフ後に再度ログインしても
ダイアログの表示が継続されていました。
この点で既に設計不良だと思うのですが、
何分7,8年前に開発されたまま運用されているため、
外部仕様の変更ができなかったのです。
>可能です。CreateProcess/CreateProcessAsUserなどで
とありますが、CreateProcessでは実行できたのですが
(OSごとに処理を分けました)、CreateProcessAsUserで実行する場合には
何か特別な設定があるのでしょうか?
ユーザトークンを取得し、プライマリトークンの複製、
環境ブロックのセットと一通りやったつもりでいたのですが
”サービスのローカルシステムアカウントにおいて”の設定は
どこに関係してくるのでしょうか。
もし良ければご教授いただければ幸いです。
当初、セキュリティ記述子に何を設定して良いか分からず、
サービスプログラムの情報からセキュリティー情報をコピー
してくるという無茶苦茶なこともやってみました…。
あと
>シャットダウン通知の処理が従来と異なるようなので注意が
必要です。
まさに今これでつまづいています。
WinProcの設定がおかしいのかWM_QUERYENDSESSIONを拾うことができません。
(他のイベントは拾えてるのでプロシージャそのものは起動できているっぽいのですが)
aris-wizさんがおっしゃってるのはこの点でしょうか…?
もしご存じでしたら教えていただけると幸いです。
色々と不勉強で申し訳ありません。どうもありがとうございました。
No.1
- 回答日時:
手動で起動する限り難しいのでは?
サービスにしてしまえば簡単だと思うんですけど。
入り口の登録と、コントロール(システムからの要求)の振り分け、
スレッドによる処理、シャットダウン用強制終了の仕組み、これらが
できれば、後は普通のプログラムと変わらりません。(個人の感想)
あと、メッセージボックスとか、ユーザ入力のように操作員との
会話を伴う処理は止めましょう。デスクトップとの会話が許可されて
いないと誰も見たり触ったり出来ないウィンドウに表示/入力が行わ
れて、永久に待機状態になってしまいます。
アドバイスありがとうございます。
今朝出社してソースを見直していましたら
簡単なケアレスミスをしておりまして、
CreateProcessでSYSTE権限で起動することができました。
因みに、本プロセスは夜間バッチ処理などの監視を行っているため、
障害時に通知を行ったりするのが主な機能なのですが、
初期の仕様検討不足に度重なるエンハンスで
今回のようなおかしな仕様に…。(^^;
シャットダウン、ログオフも通常業務ではありえないのですが、
万が一発生した場合に安全に終了させる必要があったため、
このような対策になりました。
週末の間ずっと悩んでいたので、アドバイス頂けてうれしかったです。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 日本株 SBI証券HYPER SBI 2のエラー 1 2023/01/31 13:38
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- その他(プログラミング・Web制作) プログラムの起動、利用について、使用期間を設定する方法 3 2023/08/06 21:03
- Windows 10 Windows 10のエクスプローラーの表示が遅いのですが 4 2023/02/04 09:34
- Android(アンドロイド) Android バッテリーの消耗が早くなった。2倍以上 6 2022/05/28 10:36
- デスクトップパソコン 「自動修復でPCを修復できませんでした」と表示されPCが起動しないのですが対処法はありますか? 5 2022/05/13 09:16
- ノートパソコン .dllファイルがありませんと表示される 5 2023/04/30 03:03
- その他(プログラミング・Web制作) Windows上のプログラム。「予め決められた時刻に自分で起動して処理して自分で終了する」って可能? 3 2023/01/04 14:29
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- Android(アンドロイド) Androidってなぜ画像や動画のダウンロードがマトモにされない、出来ない、時々ダウンロードに失敗す 5 2022/08/05 23:22
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フレームワーク「4.8.1」で、[S...
-
VBA初心者です。ExcelのVBAで他...
-
アプリケーションエラー 0xc00...
-
自分自身を更新するプログラム
-
Accessフォームからの外部アプ...
-
コンソールアプリケーションの...
-
pccNTmon.exeとntrtscan.exeの違い
-
OSによるWinExecの動...
-
VB6.0を使って、デバイス情報を...
-
SYSTEM権限でプロセス機動
-
Vba アプリケーションが立ち上...
-
初回接続の遅い原因について
-
WSH(VBScript)でアプリケーショ...
-
httpd.pidって何ですか?
-
MFCアプリケーションでの終了コ...
-
VB.NETでMessageBoxを表示した...
-
C#でGUI・CUIの判断する仕方を...
-
外部アプリケーションの起動に...
-
Macターミナルで実行中のプログ...
-
バックグラウンドのプロセスの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フレームワーク「4.8.1」で、[S...
-
コンソールアプリケーションの...
-
Vba アプリケーションが立ち上...
-
初回接続の遅い原因について
-
VBSでのSendKeysでの画面の最小化
-
イラストレーターCS4のシリアル...
-
pccNTmon.exeとntrtscan.exeの違い
-
VB.NETでMessageBoxを表示した...
-
VB6の強制終了について
-
OSによるWinExecの動...
-
C#でGUI・CUIの判断する仕方を...
-
vb6で異なるのプロジェクト間で...
-
対象のアプリケーションが終了...
-
WSH(VBScript)でアプリケーショ...
-
VB6での二重起動(複数起動)の制...
-
必須コンポーネントと起動条件...
-
アプリケーションをVBS(WSH?)で...
-
Windowsプログラムのビジー状態...
-
自分自身を更新するプログラム
-
httpd.pidって何ですか?
おすすめ情報