代码之家  ›  专栏  ›  技术社区  ›  migajek

将特定的文件扩展名与我的Delphi应用程序关联-是否有此库?

  •  3
  • migajek  · 技术社区  · 14 年前

    到目前为止,如果必须将文件扩展名与我的应用程序关联起来,我只需修改注册表即可。不过,我已经好几年没这么做了,我担心事情可能会有点改变。我不知道如何阻止Windows7/Vista中的注册表访问限制(如果有任何用于hkey_classes_root的限制)。因此,我在寻找一些Delphi库、单元、代码片段或在XP、Vista和7下可靠工作的任何东西。 还有什么可以处理“备份”的吗?“备份”是指将更改恢复到以前的关联的可能性…

    1 回复  |  直到 14 年前
        1
  •  5
  •   Andreas Rejbrand    14 年前

    我建议不要为此使用第三方组件,因为它只会使事情变得更复杂。

    我们都知道如何通过编辑 HKEY_CURRENT_USER HKEY_LOCAL_MACHINE 荨麻疹,对吧?在Windows Vista+中,编辑前者并不意味着麻烦,但是如果您出于某种原因想编辑后者,即如果您想编辑计算机上所有用户的关联,那么您的应用程序需要以提升的权限运行。

    要使应用程序以提升的权限运行,用户可以右键单击图标并选择“以管理员身份运行”。但那是丑陋的。但是,只要向应用程序的资源添加清单(XML文件),就可以使应用程序自动以管理员身份运行。然后,无论最终用户如何启动程序,执行*.exe文件时,UAC提示都将自动弹出,并且程序将以管理员身份运行,并且完全能够更改 香港本地机器 蜂箱。有关如何添加此清单的详细信息已在几个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设置, 这个 专业和免费的工具,Inno设置将包括您的清单。因此,如果安装程序需要,例如,如果安装程序将对 香港本地机器 .