2012-02-03 3 views
2

Windows 2008で正しく起動できるアプリケーションがあり、App1と呼びます。Windows 2008:__COMPAT_LAYER = ElevateCreateProcessのときにアプリケーションがクラッシュする

別のアプリケーション(ランチャー)で同じアプリケーションを起動すると、secur32.dllでApp1がクラッシュします。 これらの2つのケースでは、研究環境が異なっていました。

アプリケーションがクラッシュすると、その環境に1つの余分な変数__COMPAT_LAYER = ElevateCreateProcessがあります。

__COMPAT_LAYER = asInvokerをグローバルシステムレベルに設定しても問題は解決されませんでした。 HKLM \ Software \ Microsoft \ Windows NT \ CurrentVersion \ AppCompatFlags \ LayersのレジストリにApp1とランチャーを追加しても解決されません。

両方のプログラムは、彼らのマニフェストに次の権限を持っている:UACはオフになっているのrequestedExecutionLevelレベル= "asInvoker" uiAccess = "false" を

。 Windowsのアップデートは最新です。 唯一の解決策は、間に__COMPAT_LAYERをクリアするか、またはasInvokerに設定する別のプログラムを注入することです。

ElevateCreateProcessの原因となる可能性と回避方法を教えてください。ありがとうございました。

答えて

1

原因は、ランチャープロセスの名前が原因である可能性があります。 WindowsはElevateCreateProcessフラグを使って "* launch * .exe"という名前パターンに一致するすべてのプロセスを補強します。この厄介な動作はwindows \ apppatch \ sysmain.sdb shimデータベースで指定されます。これを表示するには、アプリケーション互換性ツールキットをインストールして実行します。 「System Database(32-bit)/ Applications/Autorun」の下にこのエントリがあります。無効にすることも危険ですが、rightclick - > Disable Entryは私のケースでは機能しません。

関連する問題