从电子项目执行的可执行文件不会加载资源

时间:2017-03-07 00:34:25

标签: html c++ exe electron

我正在制作一个电子应用程序,用于在运行时启动存储在我计算机上的可执行文件。如果我自己运行exe,它可以正常工作并加载所有字体。但是,当由电子应用程序运行时,它会打开,但不能加载任何字体文件。 exe是在visual studio中制作的编译发布项目。

我尝试将res文件夹放入与index.html相同的目录中,但无济于事。

index.html的代码:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Hello World!</title>
  </head>
  <body>
    <h1>Hello World!</h1>
    <script>
      var child = require('child_process').execFile;
      var exePath = "C:\\Users\\name\\Documents\\Visual Studio    2015\\Projects\\Ten\\Release\\Ten.exe";
      var parameters = ["test"];

      child(exePath, parameters, function(err, data){
        console.log(err);
        console.log(data.toString());
      })
    </script>
  </body>
</html>

main.js的代码

const {app, BrowserWindow} = require('electron')
const path = require('path')
const url = require('url')

function createWindow () {
// Create the browser window.
win = new BrowserWindow({width: 800, height: 600})

// and load the index.html of the app.
win.loadURL(url.format({
pathname: path.join(__dirname, 'index.html'),
protocol: 'file:',
slashes: true
}))

  win.webContents.openDevTools()

  // Emitted when the window is closed.
  win.on('closed', () => {

  win = null
  })
}

app.on('ready', createWindow)

// Quit when all windows are closed.
app.on('window-all-closed', () => {

if (process.platform !== 'darwin') {
  app.quit()
}
  })

app.on('activate', () => {
  if (win === null) {
    createWindow()
  }
})

谢谢!

1 个答案:

答案 0 :(得分:2)

你的exe是否使用相对路径来加载字体?如果是这样,要么将exe更改为更灵活,要么在调用execFile()时指定可选的3rd arg来指定所需的工作目录。

var child = require('child_process').execFile;
var exePath = "C:\\Users\\name\\Documents\\Visual Studio 2015\\Projects\\Ten\\Release";
var exe = exePath + "\\Ten.exe";
var parameters = ["test"];
var options = {cwd:exePath};

child(exePath, parameters, options, function(err, data){
    console.log(err);
    console.log(data.toString());
  });

如果这不起作用,我猜是某种权限问题。当您测试exe时,您的电子应用程序是否以不同的用户身份运行?