Windows 7のインタラクティブセッション0


14

セッション0でcmd.exeを起動しようとしています。これまで、昇格したコマンドプロンプトから次の操作を実行しました。

sc config UI0Detect start= auto
net start UI0Detect

応答は、サービスが正しく開始されたことを示しています。この時点で、セッション0に切り替えた場合、cmd.exeが実行されると想定しました。

次のコマンドを使用してセッション0に切り替えます。

rundll32 winsta.dll,WinStationSwitchToServicesSession

これにより、セッション0に正常に切り替えられますが、使用できるウィンドウは、セッション1に戻るオプションを持つウィンドウのみです。

セッション0でcmd.exeを起動するにはどうすればよいですか?


なぜこれをしたいのですか?UI0Detectを使用すると、新しいGUIアプリを起動するのではなく、古いサービスでメッセージボックスをポップアップできます。cmd.exeにはGUIがあります
ピーターハーンドルフ

6
@PeterHahndorf「一歩下がって、これが悪い考えのように聞こえるので、これが本当に必要なことかどうかを確認してみましょう」と答える質問をそらすのは楽しいことを理解しています。しかし、これはデバッグシナリオ用であり、簡単な修正(およびAlwaysUpのようなサードパーティアプリの使用に代わるもの)を意図しているため、「なぜ」と尋ねるのが有用な応答であるかはわかりません。とにかくありがとう。
omghai2u

ピーターにはポイントがあると思います。あなたが書くべき質問は「これが私がやろうとしていることです」です。迅速な修正には、将来の痛みのみが含まれます。「クイックフィックス」と聞いた回数を数えることはできませんが、それでも3年後に本番環境で「クイックフィックス」を見ることができます。。。別の「迅速な修正」が必要です。何らかのバッチスクリプトを実行するために入力していると仮定していますか?
surfasb

1
@surfasbあなたが提案した質問は、本質的に私が書いた質問です:「セッション0でcmd.exeを起動しようとしています。」その質問に答えを集中してください。ありがとう。そして、これが本番環境に進む可能性も、将来の痛みを伴う可能性もありません。本番環境での方法は既に設定されていますが、デバッグには使用できません。デバッグのために現在行っている方法は面倒で、サードパーティのアプリを使用する必要があります。
omghai2u

回答:


19

セッション0でcmd.exeを起動するには、Sysinternalsの psexecを使用します

psexec.exe -s 0 cmd.exe

これで、セッション0でコンソールが実行されました。

セッション0でcmd.exeを起動してGUIを表示することもできます。

psexec.exe -s -i 0 cmd.exe

このようにして、セッション0に切り替えると、cmd.exeがそこで待機します。

Windows 7で取得できる権利と同じ数の権利があります。

whoami /all

他のPsToolsを使用する場合は、/ accepteulaスイッチを忘れずに使用してください。

pslist /accepteula

それ以外の場合、プログラムはメッセージボックスをポップアップしてEulaの受け入れを求めます。メッセージボックスを閉じるためのセッション0にはUIがないため、プログラムはハングします。

セッション0で実行していることを確認するには、qprocessを使用できます。

qprocess /ID:0

すべてのサービスプロセスの中に「cmd.exe」が表示されます。


私の質問に答えてくれてありがとう。これは確かに機能しますが、私の特定の意図(コメントで指摘されているように)は、サードパーティのアプリの使用を避けることでした。これを行うには、SysInternalsツール(または、実際にはWindowsに付属していないもの)を使用する必要のない素晴らしい方法がありますか?再度、感謝します。
omghai2u

2
SysinternalのツールはMicrosoft製である「サードパーティ」とは見なされず、インストールする必要はありません。
ピーターハーンドルフ

申し訳ありませんが、デフォルトでは「サードパーティ」でインストールされていないものを検討していました。
-omghai2u

ピーター。素晴らしいありがとう。セッション0でプロセスを開始するために完璧に動作します(ログオフ時に実行し続けることを意味する。)
ダニエル・ジェームズBryars

5
最初のコマンドラインは間違っ-sていSYSTEMます:ユーザーとして実行され、引数を取りません。おそらくあなたは-i 0最初の例と-s -i 02番目の例で意味がありましたか?
jwg 14年

1

動作しません。システムとしてプロセスを開始するだけです。

サービスは、サービスコントロールマネージャーからのコマンドを受け付けるために特別な方法で作成されたプログラムです。

MSには、プログラムをサービスとして実行できるユーティリティがあります。呼び出さSrvanyれ、Windows 2003リソースキットツールに含まれています。

Windows Server 2003リソースキットツールをダウンロードする


0

ある日偶然に解決策を発見しましたが、http://www.alex-ionescu.com/?p = 59には、見つけたものに近い解決策も記載されています

次のバッチファイルを作成します(some.batと呼びます)。

start cmd

次に、このバッチファイルを呼び出すサービスを作成します(管理コマンドプロンプトを使用)

sc create access0 type= interact type= own binpath= some.bat

(各=の後のスペースに注意してください。some.batには絶対パスを使用することをお勧めします)

次に、サービスを開始するだけです

sc start ui0detect
sc start access0

(sc config UI0Detect start = autoでui0detectを自動起動する必要はありません)

そして、すべてがうまくいけば、差し迫ったメッセージの点滅ボックスを取得します![メッセージの表示]に移動すると、管理者(nt authority \ system)コマンドプロンプトが表示されます。このコマンドプロンプトは、サービスの開始に失敗しても自動的に破棄されません(したがって、startコマンドでバッチファイルが必要です)

これは機能しますが、最初の試行では機能しない場合があります。

これにより、ntsession \ systemユーザーのみに存在するインタラクティブセッション0のみにアクセスできると思います


-2

ショートカットstart(Windows)+ Rを使用して、「実行」ダイアログを開始できます。そこから、「cmd」(引用符なし)と入力するだけです。cmd


3
SuperUserへようこそ。投稿がOPの質問に回答していません。CMD普通に起動して 1つ入れられませSession 0
私は言うモニカの復元
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.