在 node-webkit 中获取当前应用程序的路径
Posted
技术标签:
【中文标题】在 node-webkit 中获取当前应用程序的路径【英文标题】:Get the path to the current application in node-webkit 【发布时间】:2012-11-26 20:07:52 【问题描述】:在 node-webkit 中,有没有办法找到当前应用程序的路径?在node.js中,你可以使用__dirname
找到当前应用的路径,但是在node-webkit中,变量__dirname
似乎是未定义的。
以下 node.js 脚本正确打印文件路径:
console.log(__dirname)
以下 node-webkit 脚本无法正确打印文件路径:
<script type = "text/javascript">
alert(__dirname);
</script>
在node-webkit中找到当前应用程序路径的正确方法是什么?
【问题讨论】:
【参考方案1】:接受的答案的链接不再可用,所以这里是一个简短的答案:
nw.js 每次运行时都会将应用的内容提取到一个临时目录中。
如果您想访问 nw.js 提取应用程序的路径,请使用 process.cwd()
如果您想访问可执行应用程序的路径,请使用:
var path = require('path');
var nwDir = path.dirname(process.execPath);
【讨论】:
【参考方案2】:这里讨论了这个问题的答案:https://groups.google.com/d/topic/node-webkit/IwGzluFC9iU/discussion
在 Windows 上,使用“process.execPath”查看启动它的可执行文件的路径。然后从那里开始工作,从路径中删除可执行文件的文件名以获取文件夹的路径(假设您的应用程序的 .nw 是相对于可执行文件或与之组合的)。
无论是使用压缩的“app.nw”还是“nw.exe”和“app.nw”组合成一个可执行文件 (app.exe),这对我都有效。
【讨论】:
能否请您复制解决方案的摘要。一旦外部资源失效,仅链接的答案往往会失去所有价值。 在此答案中提到的讨论中,建议使用window.location
获取路径。如果 node-webkit 应用程序是从 nw
文件运行的,则路径将是临时路径(node-webkit 将 nw
文件提取到的路径)。
如果 main 是外部 Uri 或导航发生在远离根文件夹的位置,则不起作用。
邮件列表被删除。请更新或删除您的链接。【参考方案3】:
如果您正在寻找应用程序源的路径(即包含package.json
的文件夹),那么您可以使用process.cwd()
。
无论环境的真正工作目录是什么,在启动节点可执行文件时,都会将process.cwd()
设置为App 源的位置。如果应用程序包含在存档中,cwd 将指向提取源的临时文件夹。
重要的是,请注意process.cwd()
可以在process.chdir(newPath)
运行的应用程序期间更改,也可能由其他事件更改,因此您可能希望在应用程序启动时存储初始值。
编辑:
澄清一下,process.cwd()
设置为包含正在运行的应用程序使用的实际 package.json
文件的文件夹。因此,如果您已将应用程序打包为存档或可执行文件(zip、exe、nwz、nw 等),则 nw.exe 会在运行应用程序之前将项目文件解压缩到临时目录。所以process.cwd()
将指向那个临时文件夹,不是原始存档或可执行文件的位置。
【讨论】:
这是我需要的,也可能是灵活性的理想选择。 实际上这行不通。我正在尝试通过将 app.nw 与 nw.exe 合并来打包,但我尝试过的任何事情都不会给我应用程序的根目录。在我的情况下,我需要引用一个包含两个目录的 SQLite db。 Erik,“应用程序的根”是什么意思。我在上面发布的方法专门给出了 extracted 文件的位置——而不是 exe(或 .zip、.nw、.nwz 等)的位置。如果应用程序被打包为 zip 或 exe,那么它可能会被解压缩到一个临时文件夹(如上所述)。 对不起,我什至不记得我现在做错了什么。似乎我无法从 .exe 上方的目录访问数据库,但我认为我打包不正确。以某种方式在 exe 上加倍 IIRC。【参考方案4】:这应该可行:
var nw = require('nw.gui'); //This line is only required for NW.js 0.12.x and below
console.log(nw.__dirname)
【讨论】:
【参考方案5】:如果您加载了外部 uri,window.location 将不起作用,但无论如何,以下内容似乎可靠:
var path = require('path');
,appPath = path.dirname(require.main.filename)
【讨论】:
我试过这个,发现require.main
是未定义的。这是因为 require
被 node-webkit 重新定义,所以 require("nw.gui")
得到特殊处理。你要使用的是global.require.main.filename
。
在我的情况下也不起作用。我正在尝试从将 nw.exe 与 app.nw 合并的包中引用两个目录。【参考方案6】:
不确定何时添加,但我相信现在获取启动路径的官方方法是:
nw.App.startPath
【讨论】:
以上是关于在 node-webkit 中获取当前应用程序的路径的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C++ 中使用 Win32_PerfRawData_Tcpip_NetworkInterface 类获取当前带宽