到目前为止,如果我不得不将文件扩展名与我的应用程序相关联,那么我只是简单地修改注册表。但是我多年来一直没有这样做,恐怕事情可能会发生一些变化。我不知道如何防止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. MacOSX - 与应用程序相关联的文件扩展名 - 以编程方式
- 3. 如何将文件扩展名与使用.desktop文件(在Linux下)的应用程序相关联?
- 4. 在Python中将具有特定扩展名的文件关联到我自己的应用程序
- 5. 将文件扩展名与程序关联
- 6. 与Windows 7的文件扩展名关联的应用程序+德尔福
- 7. OSX:将特定文件夹与正在开发的应用程序相关联
- 8. 是与给定扩展关联的应用程序吗?
- 9. 在Windows上将自定义文件扩展名与我的java程序相关联
- 10. 没有应用程序与此操作的指定文件相关联。错误
- 11. 如何将目录与我的应用程序相关联
- 12. 在Windows中将自定义文件扩展名与java应用关联
- 13. 关联应用程序与文件扩展名 - 意图过滤器不工作?
- 14. 将扩展名与程序关联的脚本
- 15. 在plug-in.xml中如何将文件扩展名与eclipse插件中特定类型的编辑器相关联
- 16. Windows 7的文件扩展名关联
- 17. 如何检查是否有任何应用程序与文件扩展名关联
- 18. Windows:与扩展关联的列表和启动应用程序
- 19. 在我的应用程序中将URL与资源相关联
- 20. 如何将URL与使用Cocoa的应用程序相关联
- 21. 如果扩展名不在Windows Seven的“默认程序”列表中,如何将扩展名与程序关联?
- 22. 将文件类型与我的应用程序(pdf和doc)相关联
- 23. 如何将NetBeans IDE与某些文件扩展名关联?
- 24. 将文件格式与我的程序相关联(Java)
- 25. 如何将我的域名与我的AWS应用程序关联?
- 26. 将文件扩展名与纯E4Editor关联
- 27. JS:XMLHttpRequest仅适用于特定的文件扩展名?
- 28. 为特定于应用程序的需求扩展Zend_Log
- 29. 如何将域关联到特定的应用程序url URL?
- 30. Wscript.run“没有应用程序与此操作的指定文件关联”
直接使用注册表是管理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