我在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中实际添加新的注册表项值?
答案 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');
那样使用它(这为软件增加了一个密钥)。