C++でVisualStudio2010 IDEを使用して、D2D1アプリケーションのアプリケーション開発作業を完了しました。これからパッケージを作成するさまざまな方法を検討し、組み込みのVisualStudioインストーラー/セットアップを使用しました。セットアッププロジェクトはスムーズにコンパイルされ、インストールファイルが作成されました。また、要件に応じてアプリケーションを正常にインストールすることができました。ただし、デフォルトの場所(C:\ Program Files(x86))にインストールすると、アプリケーションの起動が拒否されます。これまでに実行できたデバッグは次のとおりです。
- C:\ Program Files(x86)にインストール:アプリケーションが正常に起動しません。
- C:\ Program Files(x86)にインストール:「管理者として実行」時にアプリケーションが起動する
- %ProgramFiles%または%ProgramFiles(x86)%以外の場所にインストール:「管理者として実行」しなくても、アプリケーションは正常に起動します。
私はエラーケースを追い詰めようとしましたが、これまでのところ決定的または説得力のあるものは何もありません。そのため、ここで専門家の助けを求めています。私がさらにしたこと:
Dependency Walker x86バージョンを使用して、プロファイラーを介してdllが呼び出す場所/内容を把握しました。具体的な情報は何も提供されませんでした。depends.exeは、アプリケーションに遅延負荷に依存するモジュールGPSVC.dllとIESHIMS.dllがあると考えており、これらは必要ないと確信しています。プロファイラーはCRT0xC0000417エラーも示しますが、それが関連しているかどうかを判断するのは困難です。
ビジュアルスタイルにプラグマとして定義されたマニフェストがあります。これを削除しても効果はありませんでした。
これが役立つ場合-リンカー設定のC++プロジェクトマニフェストファイルオプションは次のようになります。
- マニフェストの生成-はい
- 分離を許可する-はい
- UACを有効にする-はい
- UAC実行レベル-呼び出し元として
- UACバイパスUI保護-いいえ
MSDNのドキュメントで推奨されているように、すべてのCRT関数を安全なバージョン(sprintf-> sprintf_s)に変換しました。これはここでも関係がありますか?
.exeを%ProgramFiles(x86)%にコピーしてみました。それは役に立たなかった-それで私のインストーラーは問題を引き起こしているものではないようだ。
コード内のいくつかの場所で_dupenv_sを使用して、%COMSPEC%、%TEMP%などを取得します。
デバッグをさらに進める方法へのポインタは高く評価されています。私はこれについて読みました、そして何人かの専門家は間違った文字列処理または大きいか無効なディレクトリ名を提案します。しかし、この問題は通常%ProgramFiles(x86)%でアプリケーションを起動することに固有のものであるため、私の場合はそれが適切であるとは思いません。
その他の詳細:* OS Windows 7-64ビット、最新のSPを備えたVista-32ビット* Visual Studio Professional 2010、.Netクライアントプロファイルターゲットを備えたC++プロジェクトVisualStudioインストーラー。ターゲットプラットフォーム32ビット*アプリケーションの性質-Direct2Dベース
正しい専門用語を使用しなかった場合はご容赦ください。私はアプリケーション展開の初心者です。