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

标签 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);

我怎样才能在 Vista/7 中完成同样的事情?

最佳答案

您是否尝试过以管理员身份运行它?在 Vista 中,您无法以任何旧用户身份写入 HKEY_CLASSES_ROOT。在 XP 中也不能,除非您以高级用户/管理员身份运行。许多开发人员都是这样,但这不是重点。

换句话说,您需要提升才能执行此操作。 Here是一个很好的链接,介绍了如何设置 list 以将您的应用程序标记为具有此特征。

关于Delphi - 如何更改 Vista/Win 7 中的默认文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2142175/

相关文章:

delphi - 针对带有 TStrings 和 TStringList 的接口(interface)进行编码

delphi - 将动态数组中的所有值重置为默认值

delphi - 如何将 Indy UTF-8 响应转换为 native Delphi (Unicode) 字符串?

delphi - 如何实现自定义TGraphicControl.OnResize?

Delphi:让复制/粘贴工作

delphi - 当数据集值为空时,delphi 中的 AsInteger 的值为多少?

macos - 在Delphi中获取MacOS Application Support文件夹

html - 如何使用 IdSMTP (Delphi) 发送包含 html 内容的电子邮件?

delphi - 如何阻止访问 TCustomListView 中的 Items 属性?

forms - Delphi XE2 中从另一个包中的基本表单进行视觉继承,无需源代码