Delphi - 如何在Vista/Win 7中更改默认文件扩展名

cro*_*don 3 delphi

我正在尝试添加注册文件扩展名的exe文件.下面的代码适用于XP,但在Win Vista/7中引发错误.

var
  reg: TRegistry;
begin
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_CLASSES_ROOT;
    reg.OpenKey('.' + ExtName, True);
    reg.WriteString('', ExtName + 'file');  //error: Failed to set data for ''
    reg.CloseKey;
    reg.CreateKey(ExtName + 'file');
    reg.OpenKey(ExtName + 'file\DefaultIcon', True);
    reg.WriteString('', AppName + ',0');
    reg.CloseKey;
    reg.OpenKey(ExtName + 'file\shell\open\command', True);
    reg.WriteString('', AppName + ' "%1"');
    reg.CloseKey;
  finally
    reg.Free;
  end;

  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
Run Code Online (Sandbox Code Playgroud)

如何在Vista/7中完成同样的事情?

Pau*_*Jan 10

您是否尝试过以管理员身份运行此操作?您不能像在Vista中的任何旧用户一样写入HKEY_CLASSES_ROOT.除非您以高级用户/管理员身份运行,否则您无法在XP中使用.许多开发人员都是这样,但除此之外.

换句话说,你需要提升才能做到这一点.以下是有关如何设置清单以使用此特性标记应用程序的良好链接.

  • 另一种方法是写入HKey_Current_User中的相应密钥.那么您不需要特殊权限,也不会干扰其他用户的文件关联. (6认同)