web-dev-qa-db-ja.com

プログラム互換性アシスタントは、私のアプリがインストーラーであると考えています

Win7で.NETC#WinFormsアプリケーションを作成しましたRTM x64、これはDataInstallerを呼び出したとしましょう。

このプログラムをデバッガーの外部で実行すると(現時点では機能のない空のフォームのみ)、フォームを閉じるまでは正常に機能します。次に、プログラム互換性アシスタントから次のようなメッセージが表示されます。

このプログラムが正しくインストールされていない可能性があります

次に、推奨設定を使用して再インストールするか、インストールが期待どおりに機能したと言うかを選択できます。

アプリに「DataThingy」という名前を付けた場合、これは問題ではありません。これは、* Setupと呼ばれるプログラムがUACシールドアイコンを取得する方法に関連していると思います。

これを防ぐために、アプリケーションマニフェストに入れることができる簡単なものがあると思いますか?

現在アクセスできないため、Vistaでこれが発生するかどうかはわかりません。

名前を変更することはオプションではなく、UACをオフにすることもオプションではないため、これを提案しないでください。

編集:

ああ、神様。

次のいずれかに該当する場合、UACはオールを突き刺しているようです。

エグゼ名にはWordインストーラが含まれています

AssemblyInfo.cs

AssemblyTitle contains the Word 'Installer'
    e.g. [Assembly: AssemblyTitle("DataInstaller")]
AssemblyProduct contains the Word 'Installer'
    e.g. [Assembly: AssemblyProduct("Data Installation Utility")]

「インストーラー」は「セットアップ」にすることもできます。

それは信念を乞う、それは本当にそうです。明らかに、古いVB6プログラマーの1人がレドモンドのUACチームに転居しました。

まだ回避策が必要です。レジストリにアクセスしたり、Program Filesフォルダーにファイルを配置したりしないため、アプリケーションをインストーラーと呼ぶことができない可能性があることを受け入れる準備ができていません。

IAmAVirus.exeというアプリケーションを実行しようとすると、UACによってマシンが完全にロックダウンされると思います。 (実際、私は自分がばかげているだけだと完全に確信していないので、それを試してみません)

43
Carl

これをマニフェストに追加します。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Assembly xmlns="urn:schemas-Microsoft-com:asm.v1" manifestVersion="1.0">
<compatibility xmlns="urn:schemas-Microsoft-com:compatibility.v1">
  <application>
    <!--The ID below indicates application support for Windows Vista -->
    <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
    <!--The ID below indicates application support for Windows 7 -->
    <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
    <!--The ID below indicates app support for Windows 8 -->
    <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
    <!--The ID below indicates app support for Windows 8.1 -->
    <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
  </application>
</compatibility>

前の例のすべてのオペレーティングシステムのGUIDは、ダウンレベルのサポートを提供します。複数のプラットフォームをサポートするアプリは、プラットフォームごとに個別のマニフェストを必要としません。

アプリ(実行可能)マニフェスト から取得。

43
Justin

ワークショップのように、アレックスはファイル名に基づいて推測します。

しかし、マニフェストファイルを追加しようとしましたか?これにより、アプリケーションを実行するために必要なアクセス権を指定できます。

Visual Studioから作成する方法に関するMSDN 別のリンク記事 ヘルプ

3
EKS

この問題が発生したばかりで、AssemblyInfo.csファイル内のアセンブリタイトルとcs.projファイルのアセンブリ名が一致していることを確認して修正しました。それらが同期されていなかったとき、それはこのエラーをスローしていました、それらを同じにするとそれは消えました。それがあなたの状況に当てはまるかどうかはわかりませんが、同じエラーのような状況では、試してみる価値があり、エラーをすべて無視するという受け入れられた答えを避けてください。

2
Kevin DiTraglia