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

3

我正在尝试注册一个带有文件扩展名的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中完成同样的事情?
1个回答

10

您尝试以管理员身份运行了吗?在Vista中,您不能像普通用户那样写入HKEY_CLASSES_ROOT。在XP中,除非您是以power user/admin身份运行,否则也不行。虽然许多开发人员都是这样做的,但这并不是重点。

换句话说,您需要提升权限来完成此操作。在这里是一个很好的链接,介绍如何设置清单来标记您的应用程序具有此特性。


就是这样。我没有以提升的权限运行应用程序。 - croceldon
6
另一种方法是写入 HKey_Current_User 中相应的键。这样,您就不需要特殊权限,并且也不会干扰其他用户的文件关联。 - Rob Kennedy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接