Windows注册表中的电子原子文件类型关联

时间:2016-08-17 14:52:00

标签: node.js registry electron winreg

我在Electron样板中构建应用程序,需要在Windows注册表和Mac plist中关联自定义文件类型,以便在我的应用程序中打开这些文件。

Mac似乎相当直接,并且已经找到了其他人设法做到这一点的一些信息,所以不太关心Mac。

在Windows方面,我首先想到的是使用winreg npm将密钥写入注册表。理论上似乎很容易,唯一的问题是关于如何使用winreg的文档充其量只是sparce。

我能够正常运行示例代码并吐出自动运行程序,以便安装并正常工作,阅读/输出内容对我来说很有意义。我似乎无法找到很多信息实际上是在向注册表编写新密钥,我假设我会使用create(cb)来完成此操作,但我似乎无法将其发送到工作和老实说只是创建(回调)结构似乎没有意义,因为那里没有通过密钥的逻辑,我已经尝试创建('键添加& #39;,function(){但我确定你不应该怎么做,因此它不会工作大声笑。

基本上我真正想做的就是这样(取自c#示例):

Registry.SetValue(@"HKEY_CURRENT_USER\Software\Classes\mycompany.appname.v1\shell\open\command", null, @"c:\path\to\app.exe \"%1\"");
Registry.SetValue(@"HKEY_CURRENT_USER\Software\Classes\.myextension", null, "mycompany.appname.v1");

如何在节点winreg中实际添加新的注册表项值?

2 个答案:

答案 0 :(得分:1)

相当于你的C#示例看起来像这样(使用promises,因为我不喜欢嵌套回调):

const setKeys = new Promise((resolve, reject) => {
  const regKey = new Registry({
    hive: Registry.HKCU,
    key: '\\Software\\Classes\\mycompany.appname.v1\\shell\\open\\command'
  });
  regKey.set(
    Registry.DEFAULT_VALUE, Registry.REG_SZ, 'c:\\path\\to\\app.exe "%1"',
    error => (error ? reject(error) : resolve())
  );
})
.then(() => new Promise((resolve, reject) {
  const regKey = new Registry({
    hive: Registry.HKCU,
    key: '\\Software\\Classes\\.myextension'
  });
  regKey.set(
    Registry.DEFAULT_VALUE, Registry.REG_SZ, 'mycompany.appname.v1',
    error => (error ? reject(error) : resolve())
  );
})
.then(() => console.log('Extension registered!'))
.catch(error => console.log(error));

答案 1 :(得分:1)

我们可以在Windows中使用命令提示符访问注册表。我尝试使用那些运行良好的命令,创建了一个子进程并执行了该命令,如果我们键入reg/?,我们将看到使用该命令的所有方式。您可以在此处[registry命令]:https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/reg中查看有关reg的详细信息。在电子中,我们可以像require(child-process).exec('REG ADD HKLM\Software\MYKEY');那样使用它(这为软件增加了一个密钥)。