4

Windowsのコンテキストメニューでアプリケーションにショートカットを追加する方法を研究しています。私はこの記事に出くわし、それを試してみました。これは、レジストリにキーを作成するために使用するコードです。

private void btnAddMenu_Click(object sender, System.EventArgs e)
{
    RegistryKey regmenu = null;
    RegistryKey regcmd = null;
    try
    {
        regmenu = Registry.ClassesRoot.CreateSubKey(MenuName);
        if(regmenu != null)
            regmenu.SetValue("",this.txtName.Text);
        regcmd = Registry.ClassesRoot.CreateSubKey(Command);
        if(regcmd != null)
                regcmd.SetValue("",this.txtPath.Text);
    }
    catch(Exception ex)
    {
        MessageBox.Show(this,ex.ToString());
    }
    finally       
    {
        if(regmenu != null)
            regmenu.Close();
        if(regcmd != null)
            regcmd.Close();
    }        
}

問題は、管理者アカウントで実行すると、正常に機能することです。ただし、管理者権限を持たない別のアカウントを使用して実行すると、この例外がスローされます。

system.unauthorizedaccessexception access to the registry key is denied

自分のアプリケーションの1つでこのコードを使用して、コンテキストメニューにショートカットを作成した場合、すべてのユーザーがこのコードを管理者として実行するかどうかはわかりません。

レジストリキーを作成するときにユーザー特権をエスカレートする方法はC#にありますか?

Windowsのコンテキストメニューに項目を追加する他の方法を知っているなら、私もそれらに興味があります。

ありがとうございました。

4

2 に答える 2

2

インストーラーとほぼ同じ方法で権限をエスカレーションできます。それはOSが設計されている方法であるため(そして当然のことながら)、ユーザーの操作が必要になります-あなたはそれを回避することはできません。

于 2012-04-06T10:22:45.303 に答える
2

権限自体をエスカレーションすることはできませんが(少なくともそれについて知りたいのですが、まだ可能ではないようです)、アプリを実行/起動(マニフェストに埋め込む)する必要があります。
これらのエントリを確認してください....
NETアプリケーションを管理者として強制的に実行するにはどうすればよいですか?
プログラムでプロセス特権を引き上げますか?
セットアップから実行して、コメントが言ったことを提案します。または、アプリを最初から管理者として実行するか、必要に応じて、アプリから昇格されたプロセスをジャンプスタートさせます(たとえば、マニフェストが適切にある別のexeを実行します)。

于 2012-04-06T11:41:47.190 に答える