0

私はノード Webkit が初めてで、html でデスクトップ アプリケーションを開発しています。小さなプロジェクトを作成し、nw.exe を使用して実行しました。Windows 8.1 64 ビットでは正常に動作しますが、Windows 7 では動作しません。

何度もクリックすると実行され、突然開始し、一度閉じた後、再度実行できなくなります。

私のpackage.json

{
"window": {
"icon": "app.png",
"toolbar": true,
"show": false,
"toolbar": false,
"frame": true,
"position": "center",
"width": 1360,
"height": 720
},
"apache_port": 81,
"mysql_port": 3308,
"name": "My App",
"version": "1.0.0",
"author": "Author",
"email": "test@yahoo.com",
"phone": "+91-9999999999",
"url": "http://example.com",
"main": "index.html"

}

索引.html

<script>
String.prototype.replaceAll = function(search, replacement) {
var target = this;
return target.replace(new RegExp(search, 'g'), replacement);
};

var gui = require("nw.gui");

var fs = require('fs');

if(process.env.PWD) {
    process.chdir(process.env.PWD);
}

/**
* Base dirpath
*/
var base_path=process.cwd();

var i=0;
while(i!=-1) {
base_path=base_path.replace("\\","/");
i=base_path.indexOf('\\');
}

/**
* Package.JSON Details
*/
var package;

//read config file
fs.readFile('./package.json', 'utf-8', function (error, contents) {
    package = JSON.parse(contents);
});

function log(str) { 
    //document.getElementById('text').value+= (str+"\n");
}

function proc_config(file,path) {
    fs.readFile(base_path+'/config/'+file, 'utf-8', function (error, contents) {

        var substr="%phpbrowserbox%";
        var replc=base_path;
        contents = contents.replaceAll(substr, replc);

        contents = contents.replaceAll('%mysql_port%', package.mysql_port);
        contents = contents.replaceAll('%apache_port%', package.apache_port);


        fs.writeFile(base_path+"/"+path+"/"+file, contents, function(err) {
        if(err) {
                return log("error:"+err);
        }


        log(file+" was saved to "+base_path+"/"+path+"/"+file);
    }); 


    });

}
</script>

<!DOCTYPE html>
<html>
<head>
<title>Please wait...</title>
<style>
html,body {height:100%;}
</style>

</head>
<body style="margin:0;padding:0;overflow:hidden;">

<img src="splash.jpg" style="width:100%;height:100%;">

<script>
 window.onload=function() { 
 document.title=package.name;
 proc_config('php.ini','bin/php');
 proc_config('php.ini','bin/apache/bin');

 proc_config('my.ini','bin/mysql');
 proc_config('httpd.conf','bin/apache/conf');

 var mysqld=base_path+"/bin/mysql/bin/mysqld.exe"
 var httpd=base_path+"/bin/apache/bin/httpd.exe"

 var proc = require('child_process');

//start apache server
proc.spawn(httpd);

//start mysql server
proc.spawn(mysqld);

location.href="http://localhost:"+package.apache_port+"?apache_port="+package.apache_port+"&mysql_port="+package.mysql_port+"&cache="+Math.random()+"&base_path="+base_path;

gui.Window.get().show();
} 
</script>   
</body>
</html>

誰でも助けることができますか?

4

1 に答える 1

0

64 ビット NW は 32 ビット システムでは動作しませんが、32 ビットはすべてのシステムで動作するはずです。多くの手間を省くために、コンパイルして 32 ビットに固執するだけです。とにかく、64ビットアプリは常に遅くなります。これは、メモリアドレッシングモードのサイズが2倍であり、すべての命令(大規模または小規模)が関係なく、より広いレジスタをクリア/設定/読み取る必要があるためです。

また、アプリが最初に実行されてから実行されなくなる場合は、通常、アプリがまだメモリ内にあり、完全に/適切に終了していないことが原因です。これを確認するには、CTRL + ALT + DEL を実行し、プロセスが残っている場合は強制終了します。

最後に、あなたの PACKAGE.JSON が少し不足しているように見えるので、調査していくつかのパラメータを追加することを検討してください...

     "nodejs": true,

「単一インスタンス」: true、「ページキャッシュ」: false

...などなど。幸運を。

于 2016-10-05T16:02:26.573 に答える