トップ回答者
Windows8.1上でrunasコマンドを使い別のユーザーとしてアプリを起動すると、IMEが無効化されて日本語入力ができない

質問
-
初めて投稿します。
ご指導の程どうかよろしくお願いします。
Windows8.1上でrunasコマンドを使い別のユーザーとしてデスクトップアプリを起動すると、IMEが無効化されてしまい日本語が入力できず困っています。
「IMEが無効化されている」とは、例えばIEの検索ツールバーにフォーカスを合わせても、IMEが「×」のアイコンになってしまっている状態のことです。
今のところ手元で確認したアプリはInternet Explore 11(iexplore.exe)とメモ帳(notepad.exe)とコマンドプロンプト(cmd.exe)です。
たぶん他のアプリでも同様に別のユーザーとして実行するとIMEが無効化されてしまうのだと思います。
runasコマンドの代替はないかと、別のユーザーとしてプロセスを実行する方法を一通り試してみたのですが、次のような結果となりました。
1. アプリ実行時に「管理者として実行」を使った場合は、、IMEは有効。
2. 関数ShellExecute()で引数lpVerbにrunasを指定した場合は、IMEは有効。
3. アプリから関数CreateProcessWithLogonW()を使った場合は、IMEは無効。
4. サービスから関数CreateProcessAsUse()を使った場合は、IMEは無効。
1と2の方法ですが、別のユーザーを一時的にAdministratorsグループに含めて試しました。
目的としては権限昇格をしたいわけではなく、制限された別のユーザーに成り変わってプロセスを実行、
つまりサンドボックス的な使い方を実現したいので、残念ながらこの方法は採用できません。
ただ1と2の方法は実現はできているので、3と4の方法でも実行したプロセスとIMEと連携するための
何か成してあげれば、もしかしたら実現できるのかも知れません。
どなたかこの問題についてご存知ないでしょうか。- 移動 星 睦美 2014年11月27日 0:10 MSDN >Windows クライアント開発 - 全般 から
2014年11月26日 7:24
回答
-
ご無沙汰しております。スレ主です。
いろいろあって、MSDN のテクニカルサポートの方に本件について聞いていました。
結論としては、RunAs コマンドで別のユーザーでログオンしたときは Microsoft IME は使用できないようです。
Windows 8.1 では、Microsoft IME は Text Service Framework を前提としており、Text Service Framework は対話的にログオンしたユーザーのセッション・権限の元で実行されます。
RunAs コマンドを使って別のユーザーにログオンしたときは、そのユーザーの Text Service Framework は実行されず、また起動したプロセスが対話的にログオンしているユーザーの Text Service Framework に接続する権限もないからです。
ただし、例えばユーザーアカウント制御(UAC)で管理者に成りかわった場合などは、管理者権限で Text Service Framework に接続できるので、Microsoft IME が使用できるようです。
(具体的にどんな特権が必要なのかは聞かなかったのですが...)
権限さえどうにかすれば良いのか、と思って何か抜け道がないか他にも探っていたのですが、結局どれも駄目でした。
(スレ本文に書いてあるように、管理者になってプロセスを動かすのは NG だったので)
今後の Windows で対応されることに期待、といったところですかね。- 回答としてマーク Jun Kaneko 2014年12月19日 3:21
2014年12月19日 3:11
すべての返信
-
Jun Kaneko さん、投稿ありがとうございます。フォーラム オペレーターの星 睦美です。
今回はWindows クライアントでの開発に関する話題を扱うフォーラムに投稿いただきましたが、TechNet のクライアントOSに関するフォーラムが質問の内容にあっているのではないかと思います。後ほどフォーラム オペレーターがTechNet のWindows 8 全般 フォーラムに質問を移動させていただきますね。
投稿した質問を確認する際には、フォーラムページ左上の[クイック アクセス]>マイスレッド から投稿した質問を一覧で表示できます。また、ユーザーからの返信をメールでお知らせするアラートを設定しておくと便利です。「マイクロソフトからのお知らせ」でフォーラムを利用方法する際に便利な機能やヘルプを紹介していますので詳しくはヘルプをご覧ください。
フォーラムのユーザーから参考になる回答がありましたら、投稿者から[回答としてマーク] をお願いします。
フォーラム オペレーター 星 睦美 - MSDN Community Support
- 編集済み 星 睦美 2014年11月26日 8:19 編集
2014年11月26日 8:15 -
あくまでも個人的な見解ですが。。。
この現象は、IME の仕様では。。。と思っています。IME は各ユーザ アカウント毎に "ユーザ辞書ファイル" を持っていますが、その辞書ファイルにアクセスできるのは、ローカル システム アカウント権限を持ったプロセスと、その辞書ファイルの所有者であるログオン ユーザ アカウントだけのはずです。
"runas" コマンドで別ユーザで任意のプロセスを起動させた場合、そのプロセスはログオン ユーザ アカウントではない、別のユーザ アカウントで起動されるので、ログオン ユーザ アカウント用の辞書ファイルにはアクセスできないはず。。。
IME が別ユーザ用の辞書ファイルを読み込んでくれれば問題無いのでしょうけど、そこまでは対応していないのでは。。。。- 回答の候補に設定 星 睦美 2014年12月10日 4:44
2014年11月27日 6:28 -
お馬鹿さん(と呼んでも大丈夫ですよね?)、レスありがとうございます。
>"runas" コマンドで別ユーザで任意のプロセスを起動させた場合、そのプロセスはログオン ユーザ アカウントではない、別のユーザ アカウントで起動されるので、ログオン ユーザ アカウント用の辞書ファイルにはアクセスできないはず。。。
ユーザーのキー入力をIMEが受け取って日本語に変換した後、他のプロセスのウィンドウに文字が入力されるまでの仕組みを、私はよく理解していません。
でも、その過程でIMEが辞書ファイルと入力先ウィンドウのプロセスのオーナーの比較を行っている可能性は確かに考えられますね。
そのようにしないと、辞書ファイルにあるユーザーの個人情報が別ユーザーとして実行しているプロセスに漏れてしまうことになりかねないので、仕様としてはあり得そうです。
辞書ファイルの権限を弄ることができれば、自分で確認できるかも知れません。
貴重なご意見ありがとうございます。2014年11月27日 10:43 -
ご無沙汰しております。スレ主です。
いろいろあって、MSDN のテクニカルサポートの方に本件について聞いていました。
結論としては、RunAs コマンドで別のユーザーでログオンしたときは Microsoft IME は使用できないようです。
Windows 8.1 では、Microsoft IME は Text Service Framework を前提としており、Text Service Framework は対話的にログオンしたユーザーのセッション・権限の元で実行されます。
RunAs コマンドを使って別のユーザーにログオンしたときは、そのユーザーの Text Service Framework は実行されず、また起動したプロセスが対話的にログオンしているユーザーの Text Service Framework に接続する権限もないからです。
ただし、例えばユーザーアカウント制御(UAC)で管理者に成りかわった場合などは、管理者権限で Text Service Framework に接続できるので、Microsoft IME が使用できるようです。
(具体的にどんな特権が必要なのかは聞かなかったのですが...)
権限さえどうにかすれば良いのか、と思って何か抜け道がないか他にも探っていたのですが、結局どれも駄目でした。
(スレ本文に書いてあるように、管理者になってプロセスを動かすのは NG だったので)
今後の Windows で対応されることに期待、といったところですかね。- 回答としてマーク Jun Kaneko 2014年12月19日 3:21
2014年12月19日 3:11