2017-10-12 156 views
0

我會在上下文菜單中添加一個新的條目「共享」,所以通過右鍵單擊文件,我會在上下文菜單中看到這個新條目「共享」。我想在下面的代碼,但方法CreateSubKey()拋出異常個說法System.UnauthorizedAccessException的拒絕訪問到關鍵HKEY_CLASSES_ROOT如何以編程方式獲取在上下文菜單中添加新條目?

const string MenuName = "*\\shell\\NewMenuOption"; 
const string Command = "*\\shell\\NewMenuOption\\command"; 
RegistryKey key = null; 
key = Registry.ClassesRoot.CreateSubKey(MenuName, RegistryKeyPermissionCheck.ReadWriteSubTree); 
key = Registry.ClassesRoot.CreateSubKey(Command, RegistryKeyPermissionCheck.ReadWriteSubTree); 
key.SetValue("Share", ObjectToStore); 

我看到這個東西guide但我認爲在.NET2.0是不同的

+0

我解決了probem運行一個單獨的exe與設置密鑰的管理員權限。這樣的權利的請求只被要求一次@Michael –

回答

1

我認爲您需要(本地?)管理員權限。嘗試以管理員身份執行您的應用
如果這個工作你有兩個選擇:

方法之一是要求運行應用程序管理員權限 - 不是最好的主意
方法二將是第二個(命令行)項目,它只有一個目的,創建這些註冊表項。此應用需要管理員權限。你可以從你的主應用程序運行這個應用程序(Process.Start(...))。

要強制管理,任何權限在應用程序中添加app.manifest /清單文件到您的Visual Studio項目,並取消註釋該行<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

孔文件應該看起來像這樣(有中應用多個默認項.manifest的視覺工作室爲您生成)

<?xml version="1.0" encoding="utf-8"?> 
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <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" /> 
     <!-- <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> --> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
</assembly> 

然後去項目設置,應用程序及根據清單屏幕下方您選擇app.manifest文件。重建。完成。

+0

在可能的情況下,應避免創建需要提升特權的應用程序。在這種情況下,添加到HK_USERS可能會更合適。 – DiskJunky

+1

@DiskJunky你說得對。我更新了我的文章:) – Michael

+0

@FedericoRizzo一些更多的細節將是很好的...你有什麼嘗試,發生了什麼? – Michael

0

如果您要添加到HK_CLASSES_ROOT,您的應用程序必須以提升的權限運行。理想情況下,您應該對HK_USERS保留任何應該具有相同子密鑰的更改

+0

謝謝。它的工作原理 –

+0

請稍等片刻。你確定用HK_USER我可以編輯上下文菜單嗎? @DiskJunky –

+0

這篇文章有一個更詳細的如何指導; https://stackoverflow.com/a/2124396/1838819 – DiskJunky

相關問題