問題タブ [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.
c# - サービスからの新しいユーザー セッションの開始
次の問題があります。
サービスから、ユーザー セッションでアプリケーションを開始する必要があります。そのマシンはサーバーであるため、人間のユーザーがそのマシンにログオンすることはありません。起動されたアプリケーションには、セッション != 0 が必要です。
現在の「解決策」
マシンの起動時にスケジュールされたタスクを使用しました。そのタスクは、同じマシンでリモート デスクトップ ログオンを起動するアプリケーションを (もちろんセッション 0 で) 起動します。これにより、0 を超えるユーザー セッションが作成され、ユーザーの起動時に、発売。機能しますが、トリッキーすぎます。
最も賢い方法はありますか?ユーザーがログオンしていない可能性があるため、既にオンになっているユーザー セッションを再利用できることが重要です。
メジャーアップデート
多くの調査と部分的な成功の後、特定の目的のためにユーザーを作成することに関する SysAdmin の柔軟性の欠如のおかげで、セッション 0 で壊れた 3D 部分をレンダリングするために WPF の代わりにOpenGLを使用することにしました。驚くべきことに、予想よりも時間がかかりませんでした。 . この質問を参照として持つことは、サービスからViewport3Dをレンダリングしようとする他の人にとって役立つと思います。
c# - Windows 7 の Windows サービスでスクリーンショットを撮る
c#でwinServiceを使用したWin 7のスクリーンショットに関する古い質問であることは知っています。これに関するすべての記事をスタック オーバーフローで読み、CodeProject で多くの記事を読みました... Win Vista 以降のサービスの 0 セッションと、デスクトップ チェックとの対話をサービスに許可することについて知っています...しかし、私は立ち往生しています (できる表示画像(画面)がどこに保存されているかわからないため、サービスからスクリーンショットを取得しないでください。
これは MyTimer クラスです:
そして、このコードはブラインド(空の)スクリーンショットを返します...すべて動作しますが、サービスは0セッションにあるためスクリーンショットを取得できません...現在ログインしているユーザーのセッションからGUIを取得するにはどうすればよいですか?
c# - セッション0で実行されているInternet Explorerウィンドウを一意に識別する方法は?
私はWCF web services
その自動化を作成していますinternet explorer
。の同じインスタンスにアクセスする必要がある複数の Web サービス呼び出しがありますInternet Explorer
。ただし、WCF
サービスはホストされIIS
ているため、Web サービスへのすべての呼び出しはセッション 0 で実行されます。同じインスタンスにアクセスするには、インスタンスのウィンドウ ハンドルを返すプロパティInternet Explorer
を使用します。以下のコードでは、ウィンドウ ハンドルでサービスとして実行されると、セッション 0 の分離により常に 0 が返されます。また、同じインスタンスにフックバックしたり、開いているすべてのウィンドウをループしたりすることもできません。プロセス リストを列挙し、セッション 0 で開いている各ウィンドウのプロセス ID を見つけることはできますが、オブジェクトにキャストすることはできません。SHDocVw.InternetExplorer.HWND
Internet Explorer
WCF
IIS 7
IE
IE
IE
System.Diagnostics.Process
SHDocVw.InternetExplorer
以下は私のコードです:
どんな助けでも大歓迎です。
windows - セッション 0 からパテを使用して ssh を実行すると、「サーバーのホスト キーが一致しません ...」というアラートが表示される
TeamCity からいくつかのテスト コードを実行しています。私のテスト コードの一部には、パテを使用した ssh が必要です。このコードはコマンド プロンプト (セッション 1) では正常に動作しますが、TeamCity (プロセスであるためセッション 0 で実行されます) から実行すると、テスト ログに次のアラートが表示されます。
サーバーのホスト キーが、PuTTY がレジストリにキャッシュしたものと一致しません [中略] このホストを信頼する場合は、「y」を入力してキーを PuTTY のキャッシュに追加し、接続を続行します。キーをキャッシュに追加せずに 1 回だけ接続を続行する場合は、「n」を入力します。このホストを信頼しない場合は、Return キーを押して接続を破棄してください。キーをキャッシュに保存しますか? (はい/いいえ)
これはセッション 0 にあるため、対話して「y」を押すことはできません。セッション 1 から初めてこれを実行するときに「y」を押したときにレジストリに保存されたキーが、セッション 0 に表示されるアラートを停止しない理由がわかりません。
誰でも私を助けることができますか?ありがとう。
session-0-isolation - セッション 0 での UI オートメーション
UIA を使用してアプリケーションを自動化しようとしています。テスト段階では、psexec を使用してリモート サーバー上でアプリケーションを実行し、セッション 0 で開始します。
そうするとき、セッション 0 デスクトップに切り替えるまで、アプリケーションの子の一部を自動化できません (対話型サービス検出メッセージから)。
TreeWalker を使用してアプリケーションのツリー全体を反復処理するコードをいくつか追加しました。非表示のセッション 0 では一部の子のみが作成され、インタラクティブ デスクトップ (セッション 0 またはその他) ではすべての子が作成されることがわかります。
この問題に関するドキュメントは見つかりませんでした。
助言がありますか?
c++ - Windows Server 2008 で system() を使用してサービスからバッチ ファイルを開始できないのはなぜですか?
64 ビット Windows Server 2008 マシンでサービスとして実行される C++ プログラムがあります。このプログラムは、次のコマンドを使用してバッチ ファイルを開始しようとします。
32 ビットの Windows Server 2003 では問題なく動作しましたが (バッチ ファイルが実行されました)、Windows Server 2008 ではバッチ ファイルが実行されず、戻り値 0xC0000142 が返されました (バッチ ファイルに次のようにテキストをファイルに書き込んでもらいました)。実行されたかどうかを確認するためのテスト)。存在しないものを実行しようとしても、実際には同じ戻り値が得られます。
Windows Server 2008 でのセッション 0 の分離について読んだので、psexec を使用して、サービスの「ログオン」ユーザーとしてリストされている同じドメイン ユーザーとして、セッション 0 でコマンド プロンプトを開始しました。
その後、コマンド プロンプトからバッチ ファイルを正常に実行できました。
サービスのログオン ユーザーとして表示されているドメイン ユーザーは、Administrators グループに属しています。また、C++ アプリを (サービスとしてではなく) 手動で開始すると、バッチ ファイルが開始されます。
サービスとして実行しているときに system() 呼び出しが機能しないようにするセッション 0 の分離について何かありますか? または、動作の変化に関する他の説明はありますか? いずれにしても system() が必ずしもこれを行う最善の方法ではないことはわかっていますが、これが機能しなくなった実際の理由を探しています。
com - セッション 0 のプロセスはアウトプロセス COM サーバーを共有できますか?
Windows 7 では、"MyComServer.exe" などのアウト プロセス COM サーバーがあります。と として登録しCLSCTX_LOCAL_SERVER
ますREGCLS_MULTIPLEUSE | REGCLS_SUSPENDED
。
インタラクティブ セッション (セッション番号 > 0) では、実行しているクライアントの数に関係なく、MyComServer.exe のインスタンスが 1 つしか実行されません。COM サーバーを使用して 5 つの Excel、3 つの Matlab、その他 7 つを実行しているとします。実行中の MyComServer.exe は 1 つだけです。これはいいです、これは私が意図したものです。
セッション 1、2、3 など、複数のセッションがアクティブな場合、MyComServer.exe の 3 つのインスタンスが表示されます。tasklist を使用すると、各インスタンスが異なるセッションで実行されていることがわかります。これも意図したとおりでいいです。
ただし、セッション 0 から使用すると、クライアントごとにインスタンスが表示されます。3 つの Windows サービスがすべてそれを使用しているとします。MyComServer.exe の 3 つのインスタンスが表示されます。tasklist を使用すると、3 つすべてがセッション 0 で実行されていることがわかります。セッション 0 のプロセスは、プロセス外の COM サーバーを共有できますか?
この問題を調査PostMessage
すると、セッション 0 のプロセス間で機能しないことがわかりました。私が理解しているドキュメントを読むと、PostMessage
セッションをまたぐことは想定されていません。つまり、セッション 0 のプロセスは、セッション 1 のプロセスにメッセージを投稿できません。 、セッション1のプロセスは同じセッションの別のプロセスにメッセージを投稿できますが、セッション0のプロセスは、ターゲットがセッション0でも実行されている場合でも、他のプロセスにメッセージを投稿できません.誰かがこれを確認できますか? Microsoft のドキュメントと矛盾しているようです。
ありがとう。
windows - Windows 2012 r2 でセッション ID 0 に接続できない
Windows 2012 r2 でセッション ID=0 に接続したい。ポップアップによってブロックされているサービスがあります (uac/trust などだと思います)。したがって、何が私をブロックしているのかを確認するために、インタラクティブなセッション 0 に接続する必要があります (可能な場合)。
もちろん、mstsc /admin も mstsc /console も機能しません。「WinStationSwitchToServicesSession」などもありません。
ヒントはありますか?
ありがとう
c# - セッション 0 アイソレーションからの起動プロセス
Windows 8.1 には、PowerShell スクリプトを開始するサービスがあります。このサービスは、セッション 0 分離で「nt authority\system」として実行されます。PowerShell から生成したすべてのプロセスは、セッション 0 分離で「nt authority\system」として実行されます。
システム アカウントではなく、セッション 0 のユーザー アカウントでスクリプトを実行する必要があります。私はこれを試しました
「-I 1」引数で必要なセッションを指定するPsExec。
「デスクトップとの対話をサービスに許可する」を設定してみました。
PowerShell または C# サービスからプロセスを開始しようとすると、Access is denied エラーが発生し続けます。
サービスで c# を使用してエスケープしようとした場合の例外の例を次に示します。
セッション 0 から脱出するにはどうすればよいですか?
C# コードを書き直して、別のユーザーでプロセスを開始できます。または、呼び出された PowerShell スクリプトを書き直して、別のプロセスをユーザーとして開始することもできます。何を試しても、セッション 0 から抜け出せないようです。
service - サービスはセッション != 0 で実行されますが、セッション 0 で失敗します
Python プログラムを呼び出す .bat ファイルを実行するサービスがあります。python プログラムには win32com モジュールが含まれています。
サービスがセッション 0 として実行されている場合、win32com のどこかで失敗します。
ただし、サービスをセッション != 0 として実行すると、問題なく実行されます。同様に、デスクトップの cmd ウィンドウから .bat ファイルを実行すると、正常に実行されます。
なぜこれが起こっているのかについて何か考えはありますか?