11

.NET4プログラムとそのインストーラーの2つのプロジェクトを含むVS2010ソリューションがあります。インストーラーは、前提条件(.NET Framework 4)を備えた単純なセットアッププロジェクトです。

問題は、インストーラーsetup.exeを常に管理者として実行する必要があることです。そうしないと、UACでセットアップが失敗します。(デフォルトでは、特権の昇格を求めるプロンプトは表示されません。)

setup.exe.manifest (以下に表示)をsetup.exeと一緒に配置して、管理者として実行するように強制しましたが、残念ながらWindowsはそれを無視します。これは、setup.exe自体にすでに別のマニフェストファイルが埋め込まれているためと考えられます。 requireAdministratorではなくasInvokerに設定します。

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>

また、次のプロパティを使用して起動条件を追加してみました。-

(name): Elevated
Condition: Privileged
Message: This installation requires elevated permissions to continue.

それも何もしません。

それで、誰かがこの問題を解決する方法に光を当てることができますか?

PS setup.exeの互換性設定を変更することでこの問題を回避できることは知っていますが、これは手動プロセスであり、自動ビルドプロセス(TFS)を介して行うことはできません。また、互換性設定を使用してショートカットを提供することも奇妙です。同じフォルダー内のsetup.exeへのショートカットを提供する人はいないため、ショートカットはsetup.exeの正確なパスを事前に知っている必要があることは言うまでもありません。(セットアップパッケージは移動されます。)


編集:ちなみに、私の問題はここで説明したものとまったく同じです。しかし、残念ながら、その人の解決策は見つかりませんでした。質問者は、クライアントに手動でRunAsAdministratorを使用するように依頼しました。これは私が避けようとしていることです。

4

3 に答える 3

16

フランクが指摘したように、Visual Studioセットアッププロジェクトの動作は、MicrosoftのWebサイトに文書化されています。

VisualStudioインストーラーの展開

つまり、setup.exeVS008およびVS2010によって生成されたものは、特権の昇格を求めるプロンプトを表示せずに常に実行されます([管理者として実行]コンテキストメニューオプションを使用して明示的に実行しない限り)。次に、各前提条件コンポーネントとメインのMSIインストーラーを個別のプロセスとして実行し、それを必要とするコンポーネントの特権昇格を求めるプロンプトを表示します。これは、標高のプロンプトが複数ある可能性があることを意味します。

ただし、いくつかの理由により、これが常に機能するとは限りません。私の場合、を実行しても.NETFrameworkの前提条件の昇格プロンプトがまったく表示されませんsetup.exeただし、前提条件のインストーラーを直接実行すると、プロンプトが表示されます。これは、問題が前提条件のコンポーネントではなく、setup.exeWindows自体にあることを意味します。

解決策(または回避策)?上記のリンクのMicrosoftによると、昇格プロンプトで実行するために、各前提条件コンポーネントとメインMSIを強制的に起動できます。 これを行うには、以下に示すように、セットアッププロジェクトファイル(.vdproj)を手動で編集し、次の値をTRUEに変更する必要があります。setup.exeRequiresElevation

"MsiBootstrapper"
{
    "LangId" = "3:1033"
    "RequiresElevation" = "11:TRUE"
}

これは理想的なソリューションではありませんが、元の要件に十分近いので、このソリューションに満足しています。

于 2012-07-24T09:59:02.770 に答える
5

管理者モードでMSIを実行する場合は、次の方法があります。1)セットアッププロジェクトを開き、[表示]->[起動条件]を選択します。

2)起動条件を右クリックし、起動条件に新しい条件を追加します。

3)条件を右クリックし、プロパティウィンドウを選択します。

4)条件をに設定します

AdminUser

。5)ビルドしてインストールします。

于 2015-10-12T06:02:07.490 に答える
0

あなたの問題はインストーラーの名前に関係していると思います。このリンク

EXEファイル名に「update」という単語が含まれている場合、UACを回避するにはどうすればよいですか?

名前にUpdateまたはSetupが含まれている場合、UACが起動すると言います。

インストーラーの名前を別の名前に変更できますか?

于 2012-07-16T00:29:37.880 に答える