問題タブ [session-0-isolation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows-vista - セッション0の分離
Vistaは、セッション0がビデオカードなどのハードウェアにアクセスできないようにする新しいセキュリティを提供し、ユーザーはセッション0にログインしなくなります。これは、ユーザーにGUIを表示できないことを意味しますが、それはまた、表示できないことを意味します。 1つだけ表示しますか?現在のコードの設定方法では、コマンドラインのみにする方が手間がかかりますが、既存のコードを使用してGUIをプログラムで管理できる場合は、必要なコードが大幅に少なくなります。
これは可能ですか?
MSDNの記事によると:
•サービスは、セッション0でダイアログボックスなどのユーザーインターフェイス(UI)を作成しようとします。ユーザーはセッション0で実行されていないため、UIが表示されることはなく、サービスの入力を提供できません。探している。発生しないユーザー応答を待機しているため、サービスは機能を停止しているように見えます。
自動化されたUIを使用できると思いますが、セッション0で無効になっているため、サービスでSendKeysを使用できないとのことです。
編集:私は実際にユーザーにGUIを表示する必要はありません
windows-server-2008 - windows-2008-server のサービスからゼロ以外のセッションでプロセスを作成していますか?
サービスがユーザーセッションでプロセスを作成する簡単な方法があるかどうか疑問に思っていましたか?
私のサービスは、LocalSystem アカウントとしてではなく、ユーザー (管理者) アカウントとして実行されているため、WTSQueryUserToken 関数を使用できません。
私は電話してみました
しかし、このトークンを使用して実行すると
プロセスがまだセッション 0 で実行されています。この問題を解決するにはどうすればよいですか?
私は Ole オートメーションを使用しているので、セッション 0 でない限り、プロセスがどのセッションで実行されるかはあまり気にしません。インスタンス) をセッション 0 で作成しますが、他のユーザー セッションでそれらを作成します。
どんな提案でも大歓迎です。前もって感謝します。
opengl - Windows 2008 RenderFarm サービス: CreateProcessAsUser "Session 0 Isolation" および OpenGL
XP-64 と W2K3 では正常に動作するレガシー Windows サーバー サービスと (生成された) アプリケーションがありますが、W2K8 では失敗します。これは、新しい「セッション 0 分離」機能によるものだと思います。
そのため、Windows 2008 Server の Windows サービスから新しいプロセスを作成して、以前の動作を復元 (さらにはそれを上回る) できるようにするコード サンプル/セキュリティ設定モジョを探しています。次のようなソリューションが必要です。
- セッション 0 分離制限 (セッション 0 からグラフィックス ハードウェアへのアクセスなし) を回避するために、ゼロ以外のセッションで新しいプロセスを作成します。これに関する公式の MS 行は次のとおりです。
セッション 0 はユーザー セッションではないため、セッション 0 で実行されているサービスはビデオ ドライバーにアクセスできません。これは、サービスがグラフィックをレンダリングしようとしても失敗することを意味します。セッション 0 でディスプレイの解像度と色深度を照会すると、最大 1920x1200 で 32 ビット/ピクセルのシステムの正しい結果が報告されます。
新しいプロセスは、Windows DC の作成に使用できる Windows ステーション/デスクトップ (例: winsta0/default) を取得します。ここでこれに対する解決策(インタラクティブセッションで問題なく起動する)を見つけました:C++でのインタラクティブクライアントプロセスの開始
Windows DC は、 OpenGL DescribePixelFormat 列挙型の基礎として使用される場合、ハードウェア アクセラレーション形式を見つけて使用できます (OpenGL ハードウェアが適切に装備されたシステム上)。ただし、ターミナル サービス セッションが実行されている場合を除きます (VNC は正常に動作します)。また、プロセスが動作するようにする (つまり、ターミナル サービス セッションが開いている場合でも OpenGL ハードウェア アクセラレーションを使用して実行する) ソリューションは、必須ではありませんが、非常に優れています。
私は現在、アイテム#1で立ち往生しています。これについて議論する同様の投稿がいくつかありますが(これ、およびこれなど)、ユーザーセッションがすでにログインして「取る」という保証がないため、適切な解決策ではありませんセッションIDから、また私はLocalSystemアカウントから実行していません(サービスのドメインアカウントから実行しているため、理由の範囲内で特権を調整できますが、優先度をエスカレートして含める必要はありませんSeTcbPrivileges.)
たとえば、これは機能すると思われるスタブですが、SetTokenInformation 呼び出しで常にエラー 1314 を返します (AdjustTokenPrivileges がエラーを返さなかったとしても)。プロセス トークン)、しかし、セッション ID を交換できないようです。
また、すべての場合 (たとえば、対話型のユーザーがログインしていない場合) で WTSActiveConsoleSessionId を使用することについても疑問がありますが、セッションがログインしていない状態で実行されているサービスの簡単なテストでは、適切なセッション値 (1) が返されたようです。
読みやすくするためにエラー処理を削除しました (まだ少し面倒です - 申し訳ありません)。
SetTokenInformation 呼び出しまで、すべてのデバッグ出力は正常に見えます。セッション 0 が現在のプロセス セッションであることがわかります。私の場合は、セッション 1 (WTSGetActiveConsoleSessionId の結果) を設定しようとしています。(RDCではなくVNC経由でW2K8ボックスにログインしていることに注意してください)
だから - 質問:
- このアプローチは有効ですか、それともサービスによって開始されたすべてのプロセスが意図的にセッション 0 に制限されていますか?
- より良いアプローチはありますか (「ログオン時に起動」とサーバーの自動ログオンを除く)。
- このコードに何か問題がありますか、またはセッション ID を交換して新しいセッションでプロセスを生成したいことを示すことができるプロセス トークンを作成する別の方法はありますか? OpenProcessToken の代わりに LogonUser を使用してみましたが、それもうまくいきませんでした。(この時点で、生成されたすべてのプロセスがゼロ以外の同じセッションを共有しているかどうかは気にしません。)
どんな助けでも大歓迎です-ありがとう!
.net - Windows Server 2008でセッション0の分離をバイパスする-成功しましたが、まだ表示されていません
私はここにあるコードを基本的にそのまま使用してプロセスを開始しています。このコードはVista/7で問題なく動作します-を使用してプロセスを開始すると、プロセスSystem.Diagnostics.Process.Start()
が開始されていることがわかりますが、セッション0にあるため表示されません。このコードを使用すると、プロセスがセッション1(同じセッション)で開始されていることがわかります。 Vista / 7で手動でプログラムを起動します)。
現在、Server 2008では、プログラムを手動で開始すると、セッション2が開きます。このコードを使用しない場合でも、プロセスはセッション0から始まります。このコードを使用すると、セッション1から始まります。しかし、見えません。おそらくこれは、私と同じセッションで開始されていないため、他の場所の「非表示」デスクトップに存在しているためです。
誰かが以前にこの問題に遭遇したことがありますか?ブログは比較的人気があるように思われるので、この問題がまだ解決されていないと私は信じがたいです。私が取り組んでいるサーバーは64ビットアーキテクチャで、Win7マシンは32ビットです。それでも違いはないと思いますが、ブログには、ソリューションが両方のアーキテクチャで機能することが示されています。
fonts - レンダリング中のWindowsServer2008の特殊フォント
そのため、サーバー2008で実行されているサービスがあり、レンダリングを実行するプロセス(C#アプリ)を開始します。プロセスは正常に実行されていますが、ロードされるはずのフォントの代わりにシステムフォント(Arialだと思います)を使用しています。サーバーにログインしてこのプロセスを手動で実行すると、フォントが正常に読み込まれ、プロセスが正しくレンダリングされます。
CreateProcessWithLogonWを使用してこのプロセスを実行しようとしましたが、それでも機能しません。これはServer2008の非対話型セッションに関係していると思いますが、解決方法がわかりません。
iis-7 - IISで実行されているMathematicaにフォントがロードされない
Asp.Netアプリケーション(IIS 7.5で実行)で.NET / Link for mathematicaを使用していますが、Mathematicaが使用するカスタムフォントの一部が表示されないという問題があります。
たとえば、文字Piは表示されません。次のようになりますが、実際には次のようになります。
この問題は特定の1台のマシンでのみ発生し、IISで実行している場合にのみ、コンソールアプリで(またはIIS Expressを使用して)このイメージを作成すると、イメージは正常に作成されます。
.NET / Linkの経験がある人のために、私がイメージを作成するために使用しているコードは次のとおりです。
ただし、フォントの読み込みとIISでの使用に関する問題のみであると考えているため、これを理解する必要があるとは思いません。
したがって、質問の要点は次のとおりです。IIS(またはWindowsサービス)がアクセス許可の問題以外にフォントを読み取ったり処理したりできない理由はありますか(サービスを管理者として実行しようとしたため)。
windows - 非対話型プロセス(Windowsサービス、スケジュールされたタスクなど)からのWinServer2008でのPDFの印刷
PDFを印刷する非対話型プロセスを作成しようとしていますが、Windows Server 2008(およびVista / 7)でこれを構築する方法についてアドバイスが必要です。
以前は、ディレクトリ内のすべてのPDFを印刷するスケジュールされたタスク(ユーザーアカウントがログオンしているかどうかに関係なく実行するように設定)がありました。(別のプロセスでPDFがディレクトリに移動します。)実行時に、別のプロセス(AdobeReaderまたはFoxitReader)を起動してPDFを印刷します。AdobeReaderとFoxitReaderはどちらもサイレント印刷を備えているため、スケジュールされたタスクが実行されたユーザーのデフォルトのプリンターにすべてが送信されます。UIは生成されず、すべてのファイルが問題なく印刷されます。これはServer2003で機能しました。
このプロセスはServer2008では機能しなくなりました。完全にはわかりませんが、これはセッション0の分離に関係していると思います。これを証明することはできません。ただし、 「ユーザーがログインしているときにのみ実行する」と設定すると、プロセスはスケジュールされたタスクとして機能すると言えます。これが機能している間、ユーザーはマシンにログインする必要があり、したがって私の要件を満たしていません。(私の最初の手がかりは、この前の質問にありました。)
私はこれをどのように進めることができるかを判断できません。要件を満たす方法はありますか?
いくつかのメモ:
私が見たすべての解決策は、ログインしたユーザーの資格情報を使用しているようです。上でリンクした質問を参照してください-リストされている解決策は、ログインしているユーザーのトークンを取得し、それを使用してプログラムを実行しているようです。(GetCurrentUserToken()プロシージャを見てください-戻り値は後でAPI呼び出しCreateProcessAsUser()で使用されます。)
私の現在のプロセスでは、私が知る限り、UIは生成されません。ProcMonを使用して、リーダープロセス(AdobeまたはFoxit)が正しく印刷され、印刷ドライバー自体に問題があるように見えることを確認しました。これは、print-to-fileドライバーを使用する試みによってバックアップされます。print-to-fileドライバーは3つの目に見えるステップで実行され、2番目を開始せずにすべてのファイルの最初のステップを明確に終了します。では、セッション0の分離はプリンタードライバーにどのように影響しますか?これは私にはわかりません。(この件に関して私が見つけることができる最高のドキュメントは、印刷スプーラーがセッション0で実行されている場合でも、プリンタードライバーが影響を受ける可能性があることのみを示しています。)
プロセスで[サービスにデスクトップとの対話を許可する]がオンになっている場合でも、Windowsサービスとしての印刷は機能しません。
ぼやけを誘発するテキストの壁の効果に対抗するために太字のテキストが追加されました。
c# - Windows サービスは、Windows 7 でスクリーンショットを取得できませんでした
スクリーンショットを取得する Windows サービスがあります。しかし、黒い画面しか作成しません。これは、セッション 0 の分離が原因で発生することを知っています。私はインターネットで検索しましたが、この問題に対して承認された解決策を見つけることができませんでした。
1- Windows サービスのセッションを変更し、セッション 1、セッション 2 のような別のユーザーのセッションのデスクトップ画面を取得する方法はありますか?
2- Windows サービスからセッション 0 以外の別のセッションで実行されるコンソール アプリケーションを開始する方法はありますか?
windows-services - Windows メディア プレーヤーが、Win7 および Win Server 2008 のセッション 0 で rtsp および mms ストリーム URL を再生できない
Windows Server 2003 では、プログラムを開発しました。アーキテクチャは次のとおりです。(1) サービス (ServA と呼ばれる) があり、(2) プロセス (ProcB と呼ばれる) があり、必要な WMP インターフェイスをいくつか実装することで Windows Media Player をオーバーライドします。(3) ServA は CreateProcess を介して ProcB を起動し、ストリーム URL を再生します。ServA と ProcB はすべてセッション 0 にあります。
Server 2003 では、問題なく動作します。
現在、これを Windows Server 2008 に転送しています。Server 2008 では、http プロトコルの URL (http: //xx/xx.wmv など) で正常に動作します。rtsp および mms プロトコル URL (rtsp://xx/xx.wmv、mms://xx/xx.asf など) の場合、正常に再生できず、エラー コード: 0xC00D11B1、エラーの説明: 「Windows Media Player が検出されました。ファイルの再生中に問題が発生しました。」
ServA をサービスとして開始せず、ダブルクリックして開始した場合。次に、ServA と ProcB はすべてセッション 1 にあります。この時点で、rtsp と mms プロトコル URL は正常に再生されます。
Win 7 でも Server 2008 と同じ現象です。ディスプレイとサウンド デバイスを確認しましたが、問題はありません。
詳細については、この URL http://social.msdn.microsoft.com/Forums/en-US/windowscompatibility/thread/0317c921-dc9c-4e95-9800-77a34f9f516aにリンクできます。
opengl - Windows 7 サービスの OpenGl
Windows 7 サービスからハードウェア アクセラレーション OpenGl を使用する方法はありますか? 通常のセッション 0 は、グラフィックス カード ドライバーにアクセスできません。
これが可能なサービスを構成する方法はありますか (ユーザーを指定するなど)?
新しいプロセスを開始する可能性があることは承知していますが、IPC を使用すると、ハードウェア アクセラレーションを使用する目的全体が役に立たなくなります。
私もこのSOの質問をチェックしましたが、新しいプロセスも作成します。