問題タブ [windows-appcompat-platform]
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.
vb6 - VB6 アプリを XP から Vista に更新するにはどうすればよいですか?
明らかな理由(プログラムファイルへの書き込み、およびデフォルトで許可されなくなったその他のもの)により、Vistaで問題が発生しているvb6アプリケーションで作業しています。
- アプリケーション データまたはユーザーの保存ファイルはどこに保存すればよいですか?
- そこにもフォルダやファイルを作成する権限が必要ですか?
- 他にどのような一般的なアクションが問題を引き起こしますか?
- このプログラムには、ファイルをダウンロードして登録する必要があるアップデーターがあります。これが発生した場合、権限を昇格するにはどうすればよいですか?
これらの質問のいくつかには明白な答えがありますが、私は明白なことを正しく理解したいと思っています.
windows-installer - Vista で「このプログラムは正しくインストールされていない可能性があります」というメッセージを回避する方法
一部のファイルをユーザーのハード ドライブにコピーする製品セットアップ実行可能ファイルがあります。通常の意味での一般的なインストーラーではありません (スタート メニューや Program Files フォルダーには何も追加しません)。
Vista でセットアップ プログラムが実行されるたびに、exe が終了した後、Vista はタスク ダイアログを生成します。
- このプログラムは正しくインストールされていない可能性があります
- 推奨設定を使用して再インストールします
- このプログラムは正しくインストールされました
プログラムが正しくインストールされたことをオペレーティング システムに示す (または少なくともこのメッセージを抑制する) ために、exe またはレジストリ エントリから呼び出して設定する必要がある関数はありますか?
関連する質問: Windows 7 RC の「このプログラムは正しくインストールされていない可能性があります」というメッセージ(Windows 7 固有の問題)
windows - 署名済みで RequireAdministrator の実行可能ファイルが一時フォルダーから実行されていますか?
実行可能ファイルを管理者が必要として明示しました:
そして、デジタル署名しました。
しかし、実行可能ファイルを実行すると、奇妙なことに気付きました。同意ダイアログの実行可能ファイルの名前が からPingWarning.exe
に変更されましたpinxxxx.tmp
。一時コピーが作成され、それが実行されているかのように:
実行可能ファイルを起動したときに誰かが*.tmpファイルを作成しているかどうかを確認するために、Process Montior を調べました。
この特定のコンテナー内のアプリケーション情報サービスは、実行可能ファイルを意図的に Windows 一時フォルダーにコピーし、そこからユーザーの「同意」を求めています。無効なファイル名を指定しています。svchost
同意が得られると、実行可能ファイルは元の場所から実行されます。
デジタル署名しないと、ファイルは一時フォルダーにコピーされません。
だから私の問題は、. _requireAdministrator
どうする?
アップデート:
私が見つけることができる説明に最も近いものはUninformed.orgからのものです :
ブローカーを破る
uiaccess を要求するプログラムの起動要求の場合、要求を処理するために appinfo!RAiLaunchAdminProcessが呼び出されます。次に、 appinfo!AiCheckSecureApplicationDirectoryによって、プロセスが (ハードコードされた) 許可されたディレクトリのセット内にあることが検証されます。プログラムが許可されたディレクトリ内から起動されていることを検証した後、制御は最終的にappinfo!AiLaunchProcessに渡され 、起動要求を処理するために必要な残りの作業が実行されます。この時点で、「安全な」アプリケーション ディレクトリの要件により、制限されたユーザー (または、さらに言えば、整合性の低い状態で実行しているユーザー) がカスタム実行可能ファイルを「安全な」アプリケーション ディレクトリに配置することはできません。
ヒントは、アプリケーションの配置が「許可」されている (文書化されておらず、指定されていない) ハードコードされたパスです。
もう 1 つはuiaccess を要求するプログラム用です。私の場合uiAccess="false"
、元のマニフェストにはありませんでした。ただし、no ui アクセスを含めるようにマニフェストを変更します。
しかし、それは元の問題を解決しませんでした。
更新 2:
MSDNから:
SendSAS関数
uiAccessフラグが trueに設定され たアプリケーションは、正常に起動するためにAuthenticode署名されている必要があり ます。さらに、アプリケーションはファイル システム内の保護された場所に存在する必要があります。現在、許可されている保護された場所は 2 つあります。
- **\プログラムファイル**
- **\windows\system32**
これは、要求している実行可能ファイルuiAccess
が許可された場所にある必要があるという考えを裏付けているようです。ただし、uiAccess を求めているわけではありません。
windows - 64 ビット Windows がユーザー カーネル ユーザー例外をアンワインドできないのはなぜですか?
スタックがカーネル境界を超えると、例外中に 64 ビット Windows がスタックをアンワインドできないのはなぜですか? 32 ビット Windows ではできるのに。
この質問全体のコンテキストは次のとおりです。
OnLoad 例外が消えるケース – x64 でのユーザーモード コールバック例外
バックグラウンド
32 ビット Windows で、カーネル モードコードからコールバックされたユーザー モードコードで例外をスローすると、ユーザーモードコードから呼び出されます。
Windows の構造化例外処理 (SEH) はスタックを巻き戻し、カーネル モードを介して巻き戻し、ユーザー コードに戻ることができます。ここで例外を処理でき、有効なスタック トレースが表示されます。
ただし、64 ビット Windows にはありません
Windows の 64 ビット エディションでは、これを実行できません。
複雑な理由により、64 ビット オペレーティング システム(amd64 および IA64) で例外を伝播することはできません。これは、Server 2003 の最初の 64 ビット リリース以来ずっと当てはまりました。x86 では、これは当てはまりません。例外はカーネル境界を介して伝搬され、フレームを逆戻りさせます。
この場合、信頼できるスタック トレースをさかのぼる方法がないため、無意味な例外を表示するか、完全に非表示にするかを決定する必要がありました。
当時のカーネル アーキテクトは、保守的な AppCompat フレンドリーなアプローチを取ることを決定しました。つまり、例外を隠し、最善を尽くします。
この記事では、すべての 64 ビット Windows オペレーティング システムがどのように動作したかについて説明しています。
- Windows XP 64 ビット
- Windows Server 2003 64 ビット
- Windows Vista 64 ビット
- Windows Server 2008 64 ビット
しかし、Windows 7 (および Windows Server 2008) 以降、アーキテクトは考えを変えました。64 ビット アプリケーション (32 ビット アプリケーションではない) の場合のみ、(デフォルトで)これらのユーザー カーネル ユーザー例外の抑制を停止します。したがって、デフォルトでは、次のようになります。
- Windows 7 64 ビット
- Windows Server 2008
すべての 64 ビット アプリケーションで、これまで見られなかったこれらの例外が表示されます。
Windows 7 では、ネイティブ x64アプリケーションがこのようにクラッシュすると、Program Compatibility Assistantに通知されます。アプリケーションにWindows 7 マニフェストがない場合、PCA がアプリケーション互換性シムを適用したことを示すダイアログが表示されます。これは何を意味するのでしょうか?これは、次にアプリケーションを実行したときに、Windows が Server 2003 の動作をエミュレートし、例外が消えることを意味します。Server 2008 R2 には PCA が存在しないため、このアドバイスは適用されないことに注意してください。
だから質問
問題は、 32 ビット版の Windows ではできるのに、なぜ64 ビット版の Windows ではカーネル移行によってスタックを元に戻すことができないのかということです。
唯一のヒントは次のとおりです。
複雑な理由により、64 ビット オペレーティング システム(amd64 および IA64) で例外を伝播することはできません。
ヒントは複雑です。
私はオペレーティング システムの開発者ではないので、説明が理解できないかもしれませんが、その理由を知りたいのです。
更新: 32 ビット アプリの抑制を停止するホットフィックス
Microsoft は、32 ビット アプリケーションでも例外が抑制されないようにする修正プログラムをリリースしました。
KB976038: 64 ビット バージョンの Windows で実行されるアプリケーションからスローされる例外は無視されます
- コールバック ルーチンでスローされる例外は、ユーザー モードで実行されます。
このシナリオでは、この例外によってアプリケーションがクラッシュすることはありません。代わりに、アプリケーションは一貫性のない状態に入ります。その後、アプリケーションは別の例外をスローしてクラッシュします。
ユーザー モード コールバック関数は通常、カーネル モード コンポーネントによって呼び出されるアプリケーション定義の関数です。ユーザー モード コールバック関数の例は、Windows プロシージャとフック プロシージャです。これらの関数は、Windows メッセージを処理するため、または Windows フック イベントを処理するために、Windows によって呼び出されます。
ホットフィックスを使用すると、Windows がグローバルに例外を食べるのを止めることができます。
またはアプリケーションごと:
この動作は、XP および Server 2003 の KB973460 にも記載されています。
ヒント
xperf を使用して 64 ビット Windows でスタック トレースをキャプチャすることを調査しているときに、別のヒントを見つけました。
Xperf でのスタック ウォーキング
ページングエグゼクティブを無効にする
64 ビット Windows でトレースを機能させるには、DisablePagingExecutiveレジストリ キーを設定する必要があります。これは、カーネル モード ドライバーとシステム コードをディスクにページングしないようにオペレーティング システムに指示します。これは、xperf を使用して 64 ビット コール スタックを取得するための前提条件です。 xperfスタック ウォーク コードは、ページ アウトされたページにアクセスできません。管理者特権でのコマンド プロンプトから次のコマンドを実行すると、このレジストリ キーが設定されます。
このレジストリ キーを設定したら、コール スタックを記録する前にシステムを再起動する必要があります。このフラグを設定すると、Windows カーネルがより多くのページを RAM にロックすることになるため、おそらく約 10 MB の追加の物理メモリが消費されます。
これは、64 ビット Windows (および 64 ビット Windows のみ) では、ディスク上にページ アウトが存在する可能性があるため、カーネル スタックをウォークできないという印象を与えます。
windows-installer - msiexec と appcompact の問題
次の質問があります。誰かが答えてくれれば助かります。Google で検索しましたが、記事やユーザー エクスペリエンスを読んだ後、非常に混乱しています。
問題: ユーザーが管理者権限を持っていない場合、InstallShiled を使用して作成された MSI が Windows-7 にインストールされない
- InstallShiled 11.0 で開発された MSI 用の shim をインストールする必要がありますか?
- msiexec 実行可能ファイル用に shim をインストールする必要がありますか。
- Microsoft はデフォルトでこれらの shim を提供していますか? はいの場合、クライアント マシンにどのようにインストールされていますか?
- AppCompat エンジンを有効にする目的は何ですか? 無効になっている場合、シムは使用されないということですか?
- ORCA ツールを使用して、AppCompat Toolkit の ForceAdminAccess ハックと同様のことを行うことはできますか?
あなたの時間と注意に感謝します
ありがとうトム