2011-05-31 67 views
7

我一直在試圖找到一種方法來更改 特定文件擴展名在Windows 7中的默認文件關聯。我有一個應用程序,用於查看.tif 文件,我想提示用戶,如果它不是該文件的默認查看器爲 類型。如果他們選擇將其設爲默認,則我想要覆蓋當前的默認查看器 。如果在 系統上沒有安裝其他查看器,這可以正常工作。當有已由用戶選擇的另一觀衆,我 不能改變的控制,這裏的註冊表項:有沒有什麼辦法以編程方式設置「UserChoice」註冊表項來接管文件類型關聯?

 
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\UserChoice 

我已經沖刷網頁試圖找人已經這樣做了,但沒有人 似乎有任何答案。當我嘗試更新此 密鑰中的「Progid」值時,出現「無法寫入註冊表項」或「請求的註冊表訪問不允許」錯誤。該代碼是很簡單的:

var path = @"Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\UserChoice"; 
var key = Registry.CurrentUser.OpenSubKey(path, true); 
key.SetValue("Progid", "myprogid..."); 

是否有關於這個關鍵,防止它被 一些特殊的保護程序編輯?

+0

您是否嘗試過更新它,例如在您使用管理員權限運行的控制檯應用程序中? – ChristiaanV 2011-05-31 17:29:05

+0

這是一個桌面應用程序,作爲我自己運行,但沒有管理員權限。那是我的下一步。 – Jason 2011-06-01 18:30:56

+0

以管理員身份運行並沒有幫助。 – Jason 2011-06-01 18:43:22

回答

0

它似乎不可更改,但您可以刪除UserChoice

1

爲了能夠寫入密鑰UserChoice,您需要在寫入密鑰之前取得密鑰的所有權(例如this代碼 - 不是在c#(C++)中,但我認爲它可以以同樣的方式完成)。

您將能夠寫入密鑰,並且您的文件關聯代碼將起作用!

編輯:也Registry Key Security and Access Rights on MSDN

0

如果您還沒有想出一些方法來做到這一點嘗試assocftype命令行工具。請注意,您需要使用管理權限運行它們。

  1. 創建批處理腳本,使用AssocFtype來設置文件關聯。使用System.Diagnostics.Process來執行批處理腳本。

基本上,你必須創建一個.BAT(或.cmd)與以下行文件:

ASSOC .txt=TXTFileWordPad  
FTYPE TXTFileWordPad="%ProgramFiles%\Windows NT\Accessories\wordpad.exe" %%1 

有關如何使用這些工具的更多信息,看一看:Managing Files from the Command Line- Assoc and Ftype

相關問題