How to open a .exe file on Linux Hosted NodeJS - node.js

I am attempting to have my node server launch a .exe file on a Linux hosted implementation of NODEJS
My .exe is located here: '/home/username/projects/ProjectName/server/webserver/Project.exe'
and when I attempt to start the exe
with:
exec('/home/username/projects/ProjectName/server/webserver/Project.exe', ["/home/username/projects/ProjectName/server/webserver/files/"+date], function(err, data) {
}
i am getting a file not fond error
that looks like this:
{ Error: Command failed: /home/username/projects/ProjectName/server/webserver/Project.exe /home/username/projects/ProjectName/server/webserver/files/31005
/home/username/projects/ProjectName/server/webserver/Project.exe: 1: /home/username/projects/ProjectName/server/webserver/Project.exe: MZ�##���#�#��: not found
/home/username/projects/ProjectName/server/webserver/Project.exe: 2: /home/username/projects/ProjectName/server/webserver/Project.exe: Syntax error: ")" unexpected
at ChildProcess.exithandler (child_process.js:294:12)
at ChildProcess.emit (events.js:198:13)
at maybeClose (internal/child_process.js:982:16)
at Socket.stream.socket.on (internal/child_process.js:389:11)
at Socket.emit (events.js:198:13)
at Pipe._handle.close (net.js:606:12)
killed: false,
code: 2,
signal: null,
cmd:
'/home/username/projects/ProjectName/server/webserver/Project.exe /home/username/projects/ProjectName/server/webserver/files/31005' }
When attempting to run the same function on a windows based NodeJS with windows directories instead of linux it works, the file can be opened via Wine on Linux, is there somewhere in my function call where i need to direct it to open the .exe with WINE? If so how do I go about doing that?

Try this
const { exec} = require('child_process');
exec('wine /home/username/projects/ProjectName/server/webserver/Project.exe /home/username/projects/ProjectName/server/webserver/files/'+date,
function(err, data){
});
https://superuser.com/questions/1058985/launch-program-with-wine-using-exe-arguments
https://stackoverflow.com/a/49069169/12167785

I got my desired functionality using the following:
exec("wine", ["/home/username/projects/ProjectName/server/webserver/Project.exe", date], function(err,data){
}

Related

Intellij Not finding installed CLI commands - Especially MongoDump/Restore

when i try to run a file with IntelliJ it does not recognize the Mongo CLI commands like mongodump
but what is weird is that when trying to run the same command on my local machine in the terminal it's there, the same goes when trying to do it manually on the terminal tab in IntelliJ ,
i am using zsh
/bin/sh: mongodump: command not found
at ChildProcess.exithandler (node: child process: 397:12)
at ChildProcess.emit (node: events: 390:28)
at ChildProcess.emit (node: domain:475:12)
at maybeClose (node: internal/child process: 1064:16)
at Socket. <anonymous> (node: internal/child process: 450:11)
at Socket.emit (node: events:390:28)
at Socket.emit (node: domain: 475:12)
at Pipe.<anonymous> (node:net:687:12)
at Pipe.callbackTrampoline (node: internal/async hooks:130:17)
this is the message i get when running the file through IntelliJ

Aws lambda, cant run npm module

I am trying to create a AWS Lambda function to merge pdf files stored in S3, and I am getting the following error:
Error: Command failed: java -jar "/var/task/node_modules/easy-pdf-merge/jar/pdfbox.jar" PDFMerger "samplepdf1.pdf" "samplepdf2.pdf" "merged.pdf"
/bin/sh: java: command not found
at ChildProcess.exithandler (child_process.js:294:12)
at ChildProcess.emit (events.js:198:13)
at maybeClose (internal/child_process.js:982:16)
at Socket.stream.socket.on (internal/child_process.js:389:11)
at Socket.emit (events.js:198:13)
at Pipe._handle.close (net.js:607:12)
killed: false,
code: 127,
signal: null,
cmd:
'java -jar "/var/task/node_modules/easy-pdf-merge/jar/pdfbox.jar" PDFMerger "samplepdf1.pdf" "samplepdf2.pdf" "merged.pdf"' }
I have installed and saved the npm module locally on windows, zipped it all and uploaded as aws lambda function with the following structure
myFunction.zip:
-node_modules
index.js
package.json
package-lock.json
The error is clear, you're trying to call the java command under a node lambda which is not going to work.
I suggest you create another lambda java function that will accept the pdf files to be merged and return the merged file to your original lambda function

Node.JS, node-imagemagick: Invalid paramaters/ENOENT on function call

I am writing Node.js script to create thumbnails with imagemagick. I running Windows 10. I have installed the latest Windows Binary release of ImageMagick, selecting the options to add it to the path and install legacy utilities (e.g., convert). I am using node-imagemagick to interface with ImageMagick from my script.
I can successfully use ImageMagick from the command line. For example, if I run the following command convert C:/Users/Admin/Desktop/in.jpg -resize 150x150 C:/Users/Admin/Desktop/out.jpg ImageMagick will create a thumbnail. However, if I run the convert function with the same arguments in my Node.js script:
var im = require('imagemagick');
im.convert(['C:/Users/Admin/Desktop/in.jpg', '-resize', '150x150', 'C:/Users/Admin/Desktop/out.jpg'], function (err, stdout) {
if (err) throw err;
console.log('stdout:', stdout);
});
Returns an error
Error: Command failed: Invalid Parameter - /Users
at ChildProcess.<anonymous> (C:\Users\Admin\Documents\Projects\node_script\node_modules\imagemagick\imagemagick.js:88:15)
at ChildProcess.emit (events.js:311:20)
at maybeClose (internal/child_process.js:1021:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:286:5) {
timedOut: false,
killed: false,
code: 4,
signal: null
}
In case this was because of the path separators being different on Windows, I tried replacing the slashes with double backslashes and surrounding the paths in quotes ['"C:\\Users\\Admin\\Desktop\\in.jpg"',.... However, I instead get the error Error: Command failed: Invalid Parameter - -resize.
This also happens with the identify command. identify -format %[EXIF:*] C:/Users/Admin/Desktop/in.jpg sucussfully returns information about my image while my Node.js script:
im.identify(['identify', 'C:/Users/Admin/Desktop/in.jpg'], function(err, features){
if (err) throw err;
console.log(features);
});
Returns an error
Error: spawn identify ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:267:19)
at onErrorNT (internal/child_process.js:469:16)
at processTicksAndRejections (internal/process/task_queues.js:84:21)
Emitted 'error' event on ChildProcess instance at:
at Process.ChildProcess._handle.onexit (internal/child_process.js:273:12)
at onErrorNT (internal/child_process.js:469:16)
at processTicksAndRejections (internal/process/task_queues.js:84:21) {
errno: 'ENOENT',
code: 'ENOENT',
syscall: 'spawn identify',
path: 'identify',
spawnargs: [ 'identify', 'C:/Users/Admin/Desktop/in.jpg' ]
}
If these errors are not correctable or are unnecessarily hard to correct, is there a better way to create thumbnails in Node.js? I will eventually need to be able to generate thumbnails for videos and .swf files. The last publish of node-imagemagick was 7 years ago, is there anything more recent?
There is a much better alternative and actively maintained solution to node-imagemagick called sharp.
Usage (based on your question):
const sharp = require('sharp');
sharp('C:/Users/Admin/Desktop/in.jpg')
.resize(150, 150)
.toFile('C:/Users/Admin/Desktop/out.jpg')
.then(outputInfo => {
console.log(outputInfo);
})
.catch(reason => {
console.log(reason);
});
Found a comment saying to restart your device if using node imagemagick with Windows. After a restart commands called from the Node.js script worked without errors.

AspNetCore NodeServices throws NodeInvocationException

I am using NodeServices to create PDF in AspNetCore app. App works fine on local machine but when deployed on production, on calling the pdf function, I get the following error:
Error: spawn D:\home\site\wwwroot\node_modules\phantomjs\lib\phantom\bin\phantomjs ENOENT
at _errnoException (util.js:1022:11)
at Process.ChildProcess._handle.onexit (internal/child_process.js:190:19) at onErrorNT (internal/child_process.js:372:16)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickCallback (internal/process/next_tick.js:180:9)
Microsoft.AspNetCore.NodeServices.HostingModels.NodeInvocationException: Error during rendering report: spawn D:\home\site\wwwroot\node_modules\phantomjs\lib\phantom\bin\phantomjs ENOENT
Error: spawn D:\home\site\wwwroot\node_modules\phantomjs\lib\phantom\bin\phantomjs ENOENT
at _errnoException (util.js:1022:11)
at Process.ChildProcess._handle.onexit (internal/child_process.js:190:19) at onErrorNT (internal/child_process.js:372:16)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickCallback (internal/process/next_tick.js:180:9)
I verified that all the files are at their right place. node_modules are present in the deployment.
Node Version on Azure: 8.9.4
Code to generate PDF:
module.exports = function (callback, html) {
var jsreport = require('jsreport-core')();
jsreport.init().then(function () {
return jsreport.render({
template: {
content: html,
engine: 'jsrender',
recipe: 'phantom-pdf'
}
}).then(function (resp) {
callback(/* error */ null, resp.content.toJSON().data);
}).catch(function (e) {
callback(/* error */ e, null);
});
}).catch(function (e) {
callback(/* error */ e, null);
});
};
If you use Azure App Service with a free plan, you cannot render pdf on the server. This is because the service runs in a sandbox and thus cannot run third-party executables, like node.exe. You need to upgrade your service's plan to 'Basic' or higher.
The issue was with the installation of Node packages. I was using Hosted Linux on Azure to build the solution. Switched to Hosted VS2017 build and everything is working smoothly.
https://github.com/pofider/phantom-html-to-pdf/issues/68

Sitespeed.io and graphite

I m actually trying to use sitespeed.io and graphite together and I m facing a problem.
In fact, I want to use this commande line :
sitespeed.io -u http://google.com -b firefox --graphiteHost http://127.0.0.1:3000 --graphiteNamespace sitespeed.io.newyork
and here's the error that I get :
error: Error getting versions: { [Error: Command failed: /home/skahrz/.nvm/v0.11.16/lib/node_modules/sitespeed.io/node_modules/phantomjs/lib/phantom/bin/phantomjs --version
/home/skahrz/.nvm/v0.11.16/lib/node_modules/sitespeed.io/node_modules/phantomjs/lib/phantom/bin/phantomjs: error while loading shared libraries: libfontconfig.so.1: cannot open shared object file: No such file or directory
]
killed: false,
code: 127,
signal: null,
cmd: '/home/skahrz/.nvm/v0.11.16/lib/node_modules/sitespeed.io/node_modules/phantomjs/lib/phantom/bin/phantomjs --version' }
error: Error: Command failed: /home/skahrz/.nvm/v0.11.16/lib/node_modules/sitespeed.io/node_modules/phantomjs/lib/phantom/bin/phantomjs --version
/home/skahrz/.nvm/v0.11.16/lib/node_modules/sitespeed.io/node_modules/phantomjs/lib/phantom/bin/phantomjs: error while loading shared libraries: libfontconfig.so.1: cannot open shared object file: No such file or directory
at ChildProcess.exithandler (child_process.js:744:12)
at ChildProcess.emit (events.js:110:17)
at maybeClose (child_process.js:1008:16)
at Socket.<anonymous> (child_process.js:1176:11)
at Socket.emit (events.js:107:17)
at Pipe.close (net.js:476:12)
I dont know how to work through this and to well generate my sitespeed report.
Any ideas ?
If graphite is running on same host or different host doesnt matter- but carbon will be listening on 2003 and not 3000... 3000 is grafana default port.
you cannot pass the port like a normal url... if u want to pass graphite port to sitespeed... use --graphitePort 2003 or wherever your carbon is listening.

Resources