「ClickOnceはリクエスト実行レベル「requireAdministrator」をサポートしていません。」


93

したがって、私はレジストリへのアクセスを必要とするアプリケーションを書いていました。説明や名前など、他のタッチを追加する前に、ビルド設定には触れず、動作させる必要がありました。

突然、私は消えないエラーを受け取ります。ClickOnce does not support the request execution level 'requireAdministrator'.さて、このアプリケーションではClickOnceには触れていません。私が行ったのは、これらのアクセス許可を要求するマニフェストファイルを含めることだけでした。

私の今の問題は、このエラーがなくなることはなく、プログラムをコンパイルできないことです。何をすべきかについてのアドバイスはありますか?(注意:もうすぐ寝るので、明日の午後チェックします)。


4
ここに明白なことを述べるのは嫌ですが、requireAdministratorアクセス許可要求するマニフェストを追加すると、ClickOnceはをサポートしていないと不平を言い始めましたrequireAdministrator。問題は非常に明確でなければなりません。ClickOnceは、マニフェスト(アプリケーションの一部になる)で昇格の必要性を認識しています。ここに何が必要かわからない…
ケンホワイト

4
@KenWhite:ただし、管理要件が1回のクリックと組み合わせて、プロジェクトを実行するだけでなく、コンパイルすることを妨げていることは、完全に明白でも論理的でもない可能性があります。
内部サーバーエラー

@ 500-InternalServerError、ロジックは、「requires Admin」を追加すると、「requires Admin not supported」、IMOと関係があるためにコンパイルされないという事実によって、因果関係が存在することを通知するはずです。:-)
ケンホワイト

1
問題は、ClickOnceと管理者のアクセス許可を使用したいことではなく、管理者のアクセス許可を使用したいということで、以前(約10回)コンパイルしていたのですが、今回はClickOnceは互換性がないと言っています。
LMS

10
@KenWhite問題はあなたが提案するほど明確ではありません。この問題は、「公開」ボタンをクリックしたときに発生します(少なくとも私にとっては)。私はマニフェストを追加し、「requireAdministrator」を選択しました。その後、プログラムは問題なく動作しました。[公開]をクリックしたときにのみ、このエラーが発生し始めました。設定に入り、 "ClickOnce"を無効にするまで、エラーをクリアできませんでした。したがって、解決策は、「requireAdministrator」がサポートされていないことではありませんが、「ClickOnce」を有効にできず、「requireAdministrator」が設定されている場合は「公開」をクリックできません。
Gavin Coates 2013年

回答:


147

編集:このコメントも良い答えを与えます。

一度クリックすると、「公開」をクリックするたびに、有効にするかどうかが表示されます。「requireAdministrator」を使用している場合、ClickOnceを使用できないため、プロジェクトを「公開」できないようです。


元の:

[セキュリティ]タブで、[ClickOnceセキュリティ設定を有効にする]がオンになっていることがわかります。チェックしなかったけど。とにかく、チェックを外すと、ClickOnceでエラーが発生しました。見つけるのにしばらく時間がかかりました...


3
ああ、それはあなたが受け取ったエラーメッセージから明らかだと思った;)
内部サーバーエラー

3
私を混乱させたのは、ClickOnceを有効にしていないことです。
LMS

良い質問と回答、それは私を助けました、ありがとう!
Moh

29
一度クリックすると、「公開」をクリックするたびに、有効にするかどうかが表示されます。「requireAdministrator」を使用している場合、ClickOnceを使用できないため、プロジェクトを「公開」できないようです。
Gavin Coates 2013年

1
@GavinCoatesが言うことは正しいです。その理由は、ClickOnceアプリケーションは常にユーザーごとにAppDataフォルダーにインストールされるためです。特権の昇格により、ClickOnceアプリケーションがインストールされていないユーザーコンテキストが切り替わります。
bertl

43

これは古い質問ですが、2年後にここに来ました。

問題を解決するために、プロジェクトプロパティの[セキュリティ]タブからClicKOnceを無効にすることができます。下記参照:

ここに画像の説明を入力してください


3
そして、あなたがアプリケーションを公開するとき、このチェックボックスは再びチェックされます。
dikkini

@dikkini、まさに!それを無効にする方法、誰もが答えを持っていますか?
フェイガン

@saidfaganこの場合の答えや解決策はありません。util ULMergeを使用して、exeファイルとdllファイルを結合します。
dikkini

18

公開ウィザード、または「今すぐ公開」を使用したことがある場合は、1回限りのチェックボックスが自動的に選択されます...


16

これは古いことは知っていますが、私は答えを探して偶然見つけました。私の場合、私はパブリッシュ機能を使用しており、引き続き使用する必要があります。管理機能へのアクセスも必要です。したがって、そのため、上記の答えはどれもうまくいきませんでした。

アプリケーションの最初に、管理者として実行されているかどうかを確認するメソッドを追加し、実行されていない場合は、管理者として再起動しました。これを行うには、次の参照を追加する必要があります。

using System;
using System.Diagnostics;
using System.Reflection;
using System.Security.Principal;

次に、メインメソッドがアクセスしやすい場所にこれを配置する必要があります。私はWPFを使用しているので、MainWindow.xaml.csに追加しましたが、コードの早い段階でどこにでも追加できます。必要に応じて、これらのメソッドに「静的」を追加することを忘れないでください。

private void AdminRelauncher()
{
    if (!IsRunAsAdmin())
    {
        ProcessStartInfo proc = new ProcessStartInfo();
        proc.UseShellExecute = true;
        proc.WorkingDirectory = Environment.CurrentDirectory;
        proc.FileName = Assembly.GetEntryAssembly().CodeBase;

        proc.Verb = "runas";

        try
        {
            Process.Start(proc);
            Application.Current.Shutdown();
        }
        catch(Exception ex)
        {
            Console.WriteLine("This program must be run as an administrator! \n\n" + ex.ToString());
        }
    }
}

private bool IsRunAsAdmin()
{
    try
    {
        WindowsIdentity id = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(id);
        return principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
    catch (Exception)
    {
        return false;
    }
}

最後に、プログラムの開始時に、メソッドへの参照を追加します。私の場合、それをMainWindowに追加しましたが、Mainにも追加できます。

public MainWindow()
{
    InitializeComponent();
    AdminRelauncher(); //This is the only important line here, add it to a place it gets run early on.
}

お役に立てれば!


新しいインスタンスを開始しますが、定義によりデバッガにアタッチされません。(新しい空き(アタッチされていない)インスタンスを呼び出し、デバッガにアタッチされているインスタンスを閉じます)
deadManN

1
@deadManN非常に正しい。その時点までにデバッガーは必要なかったので回避しましたが、VSを管理者として実行し、プログラムを管理者モードで起動することもできると思います。再起動をスキップします。私はそれを確かめるためにテストします。
タイラーC

1
これに遭遇した人にとって、上記は実際に機能します。
タイラーC

>>「アプリケーション」という名前は現在のコンテキストに存在しません。エラー
VEE

このコードは新しいプロセスを開始するだけですが、私のアプリはコンソールなので、引数は空のままにしておきます。
VEE

5

このアクションを実行するには、「ClickOnceセキュリティ設定を有効にする」を選択します(パブリッシュ時に「オフ」にできないため、前述のとおり)、「これは部分信頼アプリケーションです」を選択します。「ローカルイントラネット」は、完全に問題のないドロップダウンメニューで自動的に選択されます。

変更を保存し、アプリケーションを公開します。:-)セキュリティ設定スニペット


2

app.Manifestファイルを確認すると、次のように表示されます。

 <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />

コメントには手順が記載されていますが、「requireAdministrator」を削除してこれを挿入するだけで問題が解決しました。

 <requestedExecutionLevel  level="asInvoker" uiAccess="false" />

2
OPは、アプリケーションのレジストリにアクセスする必要があると言っているため、これはオプションではありません。
LeeCambl 2015年

requireAdministratorレジストリへの書き込みには特権が必要なので、これは必須です。
SkiSharp

ClickOnceは要求の実行レベルをサポートしていませんasInvoke
SkiSharp

2

同じ問題があります。「ClickOnceセキュリティ設定を有効にする」のチェックを外して解決します。VisualStudioで このオプションを見つけるにはプロジェクトを右クリックします==> properties ==>セキュリティを選択==> ClickOnceセキュリティ設定を有効にします(このオプションはすでにチェックされているので、チェックを外すと問題が解決します)。


2

VB.NETのコードスニペットは次のとおりです

If Not New WindowsPrincipal(WindowsIdentity.GetCurrent).IsInRole(WindowsBuiltInRole.Administrator) Then
            Process.Start(New ProcessStartInfo With { _
                                                     .UseShellExecute = True, _
                                                     .WorkingDirectory = Environment.CurrentDirectory, _
                                                     .FileName = Assembly.GetEntryAssembly.CodeBase, _
                                                     .Verb = "runas"})

編集:しかし、この方法で展開すると、一部のAVソフトウェアがコードをブロックします。


1

「ClickOnceのセキュリティ設定を有効にする」のチェックを外すと動作しないので、見つけた方法を試してください。

まず、app.manifest requestedExecutionLevelアイテムをそのままにします。

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

次に、Program.csファイルを次のように編集します。

using System;
using System.Diagnostics;
using System.Reflection;
using System.Security.Principal;
using System.Windows.Forms;

次のようなメインメソッドを再構築します。

    static void Main()
        {
            var wi = WindowsIdentity.GetCurrent();
            var wp = new WindowsPrincipal(wi);

            bool runAsAdmin = wp.IsInRole(WindowsBuiltInRole.Administrator);

            if (!runAsAdmin)
            {
                // It is not possible to launch a ClickOnce app as administrator directly,
                // so instead we launch the app as administrator in a new process.
                var processInfo = new ProcessStartInfo(Assembly.GetExecutingAssembly().CodeBase);

                // The following properties run the new process as administrator
                processInfo.UseShellExecute = true;
                processInfo.Verb = "runas";

                // Start the new process
                try
                {
                    Process.Start(processInfo);
                }
                catch (Exception)
                {
                    // The user did not allow the application to run as administrator
                    MessageBox.Show("Sorry, but I don't seem to be able to start " + 
                       "this program with administrator rights!");
                }

                // Shut down the current process
                Application.Exit();
            }
            else
            {
                // We are running as administrator
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
        }

Windows 10およびVisual Studio 2019で動作します!


1

これに遭遇した人のために、私は結局私のために働いたものに貢献したいと思いました。

はい、[ビルド]> [パブリッシュ]を実行すると、[ClickOnceセキュリティ設定を有効にする]オプションが自動的に再チェックされます。

私にとっては、「公開」する必要はありません。これは、ユーザー向けのスケジュールされたタスクを作成するシンプルでポータブルな.exeであり、管理者としてログインした場合でも、昇格したことを確認する必要がありました。

そのため、\ bin \ Releaseから最新の.exeを取得しました。これがクライアントのシステムに展開されます。

期待どおりに機能しました-つまり、UACが有効になっているシステムに最高の設定でそれを置くと、.exeに「シールド」があり、管理者としてログインしている場合でも、実行すると、上昇し、UACプロンプトが表示されます。

私の小さなタスクスケジューラアプリは、「アクセスが拒否されました」エラー(以前は.exeを右クリックして[管理者として実行]をクリックすることによってのみ回避できました)なしでタスクを作成できるようになりました。


私はこれとまったく同じ問題を抱えており、上記の答えはどれもうまくいきませんでした。彼らが一度クリックのセキュリティ設定をやり直してくれることを望みます。ほとんどの場合、特にオンラインで公開されるアプリでは絶対に必要であり、優れた機能ですが、ローカルベースの出版物にのみより良いオプション/回避策があったらいいのにと思います。
SkiSharp

-12

ただ

Imports System.security

Uはエラーにならず、アプリケーションは管理者として実行されます


1
単にアセンブリへの参照を割り当てるだけでは、ほとんどの場合コードは実行されません。これ以上投稿しないと、これは何も伝えません。この投稿は、管理レジストリの編集、より具体的には、ClickOnceアセンブリを生成するVisual Studioの[公開]オプションを介した展開の要件に関するものです。明確さの欠如、または明らかな関連性のために反対票を投じました。
Anthony Mason

これ...これはノーです これは、行数を1増やす以外はまったく何もしません。そのアセンブリ内でオブジェクトやメソッドを呼び出さずにアセンブリを参照しても、何も起こりません。前述のコメントのように。
SkiSharp
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.