Repository navigation
Silent Mode execution #556
Description
Not an issue, but a feature request.
Since it very usefull to use iojs as script interpreter, the one feature is missing, and I can suggest that many can vote for it - execute script without console window showing.
I'm not really a programmer, and cannot even say is it possible or not to make console application start without creating a window. But if it is possible I think it may be very usefull to have some command line switch, like --background or --hidden to get this stuff.
Another approach to this can be via another executable, for example windows has wscript.exe and cscript.exe to execute scripts in different modes.
Maybe this was discussed and rejected a lot of time in Node project, but since IOJS is a different project I just want to try again =) I know there is a lot of stuff to get this done like binaries that executes console apps in hidden mode, but this is such a little and such a usefull feature so having it bundled within iojs executable will be really awesome, since we don't need another tool for that.
For example:
I need my JS script to execute some program, wait for it's finish, and do some stuff after that, maybe depend on exit code or something like that, so I can spawn a new process from script and give it a callback. They key here is that I don't want to see any windows, neither spawned process, nor iojs. And I will not see spawned process, but will see iojs window for all the time the spawned process will work. So this is a bit frustrating.
So my question is:
Is this feature can be accepted for consideration by new TC or not?
And if not, can you please provide some info how I can recompile iojs executable to get it run completely silent?
Activity
bnoordhuis commentedon Jan 22, 2015
/cc @piscisaureus - I remember previous discussions about this but I forgot the details.
dougwilson commentedon Jan 23, 2015
You just have to modify the PE header; there are plenty of scripts on the web that can do this, and I already do this for Node.js. https://metacpan.org/source/SREZIC/Tk-804.032/exetype is the source of one such script.
piscisaureus commentedon Jan 23, 2015
@aleeksunder
Unfortunately due to windows limitations it's not quite possible to build a console/gui "dual mode" application. The only solution I can think of is building two binaries. But I don't think a GUI build of node is useful for the general user base so we won't be shipping binaries for it.
That said, it's not hard to build node as a gui application. You can use @dougwilson's trick, or do it the "official" way, as follows:
WinMainentry point that gets called when iojs is started; this should go into node_main.cc.I'd accept pull requests that make GUI builds of node easier.
rvagg commentedon Jan 23, 2015
Java ships with
javaandjavawfor this reason and may be a model we can follow.piscisaureus commentedon Jan 23, 2015
Quoting myself:
Maybe I was a bit fast too fast in drawing conclusions. Can I suggest a raise of hands? +1 if you 'd like us to ship two version of
node.exe, 0 if you don't care, -1 if you're against.rvagg commentedon Jan 24, 2015
-0, this is a Windows-only concern as far as I see it so mostly a call for @seishun and @piscisaureus, though it does also add some build complication.
dougwilson commentedon Jan 24, 2015
It's interesting to hear that Java ships with
javaandjavaw--ActiveState's Perl ships withperlandguiperlas well for this use-case.seishun commentedon Jan 24, 2015
And Python ships with
pythonandpythonw. I'm not too sure if it's really worth the added complexity.BenSower commentedon Jan 30, 2015
+1 (even though I am Linux only, that option would be nice for the casual windows development)
silverwind commentedon Feb 3, 2015
+1, I'd certainly see use of an "GUI" build for simple backgrounding of processes. I'd suggest setting a
.jsfile type association to the gui app through the installer (I think.jsto this date still associates with WSH).rvagg commentedon Feb 3, 2015
Perhaps this simply comes down to level of difficulty. I have no objections to shipping a nodew.exe in releases. Maybe someone should try a PR for this if they want the feature, if it's not super complicated then it may have a good chance of getting in because you'd mainly just have to convince the Windows collaborators (we only have 2 ATM AFAIK).
silverwind commentedon Feb 3, 2015
Also, I think it would generally be appreciated by novice users on Windows if they could run a script by double clicking on it (Maybe pointing them to a npm zip before).
silverwind commentedon Feb 4, 2015
On the other hand, I think a gui app without any visible windows would be quite confusing. A systray icon could solve that, but it's probably quite a bit of work.
aleeksunder commentedon Feb 10, 2015
Yes, the the complexity is not what we looking for... I don't think that this feature is important enough that you guys drop what you do and implement it, but maybe sometime later, when you have a time for it, just look at the issue.
I've looked for another interpreters ( Perl, Python, etc ) to find out how is it possible to implement this and not to break anything already done... I think the only way here is to compile main binary as .dll-library, so it may be named iojs.dll as a "backend" and provide "frontends" simple .exe-files like "node.exe", "nodew.exe" so them may use .dll in the way they compiled and do not create any symlink on windows ( iojs.exe -> node.exe ), so this can ressurect 100% work on Windows XP and 2003. Finally I think that compile main binary as .dll-library is not too bad idea, since it provides the ability to use IOJS as module in other software with ease. Maybe projects like Node-Webkit ( NW now ) and others similar stuff will be happy to hear about official library. I'm not pretty sure about Mac and Linux, but can suggest that .so file there for exact purpose... So finally this maybe implemented cross-platform.
I have no idea how external library will affect performance of IOJS, and how is it difficult to get this all done, and just write some thoughts about this...
27 remaining items
s-h-a-d-o-w commentedon May 22, 2018
Since I also had a need for this in one of my projects, I ported @ukoloff's solution (Thank you very much for posting it!) to node and released it as a standalone solution that offers both CLI and API:
https://www.npmjs.com/package/create-nodew-exe
ryzokuken commentedon May 31, 2018
Closing this because there's a solution available in the userland (thanks, @s-h-a-d-o-w). Feel free to reopen this.
s-h-a-d-o-w commentedon Jun 1, 2018
@ryzokuken
Uhm, thanks but I was actually hoping for an official solution at some point because the solution implemented by @ukoloff and me is a pretty dirty hack, as is noticeable by the fact that when you start an app using such a modified .exe, the mouse cursor will switch to "busy" state for like 5-6 seconds.
Which obviously makes for questionable UX, as the user will rightfully ask themselves "What the hell is that thing doing?", as node doesn't actually take 5-6 seconds to start up.
poiru commentedon Jun 1, 2018
@s-h-a-d-o-w FWIW, the
node_main.ccpatch in my earlier comment addresses the feedback cursor as well.s-h-a-d-o-w commentedon Jun 1, 2018
Yeah I saw that but... as that can't be automated (at least I don't think so, as the code base may change, so you always need to check manually?), I find it too much of a hassle to deal with especially for small personal projects.
If you work at a company where you're free to spend an hour here or there building silent executables for every node version that is being used, it's different. Still annoying I imagine but... at least you get paid to do it. 😉
ryzokuken commentedon Jun 6, 2018
@poiru @s-h-a-d-o-w please feel free to discuss this and reach consensus, and feel free to reopen this if you feel it should be. I just closed this because it's technically resolved and there was no activity. You'd also want to ask someone to work on this, or submit a PR yourself. We cannot just keep it open.
develar commentedon Nov 17, 2018
It is also required for Proton Native and other NodeJS libui-based frameworks. The main concern is not technical issue, but increased maintenance costs — on Linux and macOS electron-builder can use officially provided NodeJS executables, but on Windows we need to maintain LaunchUI and build it for each NodeJS version. Even if appveyor offers free build service for everyone to build custom, it is not convenient for users.
bittu commentedon May 3, 2019
Can anyone help to achieve same for macos?
ukoloff commentedon May 5, 2019
@bittu I always thought that MacOS is like Linux in this respect. Linux need no
nodew(as well asjavaw,pythonw,rubywetc), so does MaxOS.yoavain commentedon Oct 3, 2019
You can use this module:
create-windowless-app
This module:
yoavain commentedon Sep 17, 2021
I just created a template repository from this module (if you prefer not to run it yourself)
Niek commentedon Feb 24, 2024
Quite crazy that this is not a solved problem. For now I rely on
cmd /c start /min node.exe file.jsbut that's far from ideal.