到目前爲止,如果我不得不將文件擴展名與我的應用程序相關聯,那麼我只是簡單地修改註冊表。但是我多年來一直沒有這樣做,恐怕事情可能會發生一些變化。我不知道如何防止Windows 7/Vista中的註冊表訪問限制(如果有任何HKEY_CLASSES_ROOT)。因此,我正在尋找一些德爾福圖書館,單位,代碼片斷或任何可以在XP,Vista和7下可靠工作的東西。 是否有任何處理「備份」的東西?通過備份我的意思是恢復到以前的協會的變化的可能性...將特定的文件擴展名與我的delphi應用程序相關聯 - 任何用於此的庫?
回答
我會建議不要使用第三方組件,因爲它只會使事情變得更加複雜。
我們都知道如何通過編輯HKEY_CURRENT_USER
和HKEY_LOCAL_MACHINE
配置文件進行文件關聯,對吧?在Windows Vista +中,編輯前者意味着沒有問題,但如果由於某種原因想要編輯後者,即如果要編輯計算機上所有用戶的關聯,則應用程序需要以提升的權限運行。
要使應用程序以提升的權限運行,用戶可以右鍵單擊該圖標並選擇「以管理員身份運行」。但這很醜陋。但是,可以通過簡單地將清單(XML文件)添加到應用程序的資源來自動以管理員身份運行應用程序。然後,無論最終用戶如何啓動程序,UAC提示都將在執行* .exe文件時自動彈出,程序將以管理員身份運行,並且完全可以更改配置單元。有關如何添加此清單的詳細信息已在幾個SO問題中進行了解釋。這真的很容易。
據我所知,正在運行的應用程序不可能在運行時「升級」它的權限。所以,如果你在你的應用程序的按鈕,與正常權限運行的,你不能做這樣的事情:
procedure Button1.Click(Sender: TObject);
begin
SomehowGetAdminPrivileges;
ChangeLocalMachineRegistry;
SomehowGetBackNormalPrivileges;
end;
這是完全不可能的。所以,如果你需要做一些事情,在運行時需要管理員權限,你需要調用外部應用程序,如
procedure Button1.Click(Sender: TObject);
begin
ShellExecute(Application.Handle, nil, PChar('myapp.exe'), nil, nil, SW_SHOWNORMAL);
end;
MyApp.exe將需要有一個清單,這樣它會與引發權限運行,和能夠做你想做的。但最好myapp.exe不應該有一個GUI - 當用戶單擊該按鈕時,出現UAC提示,並且myapp.exe執行註冊表更改,然後終止。
這將是可能的,但使用第三方組件完成此操作很尷尬。
您是否需要在安裝過程中更改註冊表?如果您使用Inno Setup,專業和免費工具,Inno Setup將包含您的清單。因此,如果設置需要,例如啓動setup.exe(用Inno Setup編譯),UAC提示將出現。如果安裝程序將對HKEY_LOCAL_MACHINE
進行任何更改。
你知道'HKEY_CLASSES_ROOT'是'HKEY_CURRENT_USER'和'HKEY_LOCAL_MACHINE'中子鍵的組合,對吧?請參閱http://en.wikipedia.org/wiki/HKEY_CLASSES_ROOT#HKEY_CLASSES_ROOT_.28HKCR.29 – 2010-06-06 12:55:07
- 1. 如何將特定的文件擴展名與我的應用程序關聯?
- 2. 關聯文件擴展名與我的應用程序
- 3. 將自定義文件擴展名關聯到我的應用
- 4. MacOSX - 與應用程序相關聯的文件擴展名 - 以編程方式
- 5. 將文件擴展名與具有可變擴展名的文件相關聯
- 6. 如何將文件擴展名與使用.desktop文件(在Linux下)的應用程序相關聯?
- 7. wp7.1中關聯文件擴展名與應用程序
- 8. 將文件擴展名與程序關聯的最佳方法
- 9. 在Python中將具有特定擴展名的文件關聯到我自己的應用程序
- 10. 關聯文件擴展名與應用程序失敗,長文件名
- 11. 將文件擴展名與程序關聯
- 12. 與Windows 7的文件擴展名關聯的應用程序+德爾福
- 13. OSX:將特定文件夾與正在開發的應用程序相關聯
- 14. 是與給定擴展關聯的應用程序嗎?
- 15. iPhone:圖像文件擴展名不關聯到我的應用程序
- 16. 創建註冊表項以將文件擴展名與C++中的應用程序相關聯
- 17. 在Windows上將自定義文件擴展名與我的java程序相關聯
- 18. 沒有應用程序與此操作的指定文件相關聯。錯誤
- 19. 如何將目錄與我的應用程序相關聯
- 20. 如何下載與其他應用程序關聯的擴展文件?
- 21. 沒有與文件名或擴展名「true」關聯的序列化程序?
- 22. 在Windows中將自定義文件擴展名與java應用關聯
- 23. 關聯應用程序與文件擴展名 - 意圖過濾器不工作?
- 24. 將擴展名與程序關聯的腳本
- 25. 在plug-in.xml中如何將文件擴展名與eclipse插件中特定類型的編輯器相關聯
- 26. 如何將文件擴展名與MIME類型與Cheyenne關聯?
- 27. Windows 7的文件擴展名關聯
- 28. 如何檢查是否有任何應用程序與文件擴展名關聯
- 29. Windows:與擴展關聯的列表和啓動應用程序
- 30. 使用我的程序使用每個關聯的命令行參數關聯文件擴展名
直接使用註冊表是管理shell文件擴展名的標準方式。而且這也不是特別困難... – 2010-06-06 12:22:29
我知道這並不難,我只是怕在Vista和7中引入新的特權系統。 – migajek 2010-06-06 12:26:12
不怕。但前提是你不在部署的應用程序中執行此操作。編輯文件關聯 - 是應該安裝應用程序的東西。安裝程序以admin /擡頭運行,所以它對HKLM的訪問沒有任何問題。它可以安裝應用程序並註冊它。你的應用程序本身不應該註冊文件assoc。那麼,如果你願意,你可以做到。但爲此使用HKCU。 – Alex 2010-06-06 16:50:15