Repository navigation
Silent Mode execution #556
Description
Activity
- addedwindowsIssues and PRs related to the Windows platform.Issues and PRs related to the Windows platform.
on Jan 22, 2015 /cc @piscisaureus - I remember previous discussions about this but I forgot the details.
And if not, can you please provide some info how I can recompile iojs executable to get it run completely silent?
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.
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:
- Specify that node is to be built for the "windows" subsystem and not the "console" subsystem. This is specified in common.gypi, although you may want to leave it there and override it only in node.gyp.
- Add a
WinMainentry point that gets called when iojs is started; this should go into node_main.cc. - GUI apps may not have a stdin/stdout/stderr, which may make iojs nonfunctional. I don't know exactly what is to be done, but it can't be hard.
I'd accept pull requests that make GUI builds of node easier.
Reacted by Tobias NießenReacted by FTEJava ships with
javaandjavawfor this reason and may be a model we can follow.Quoting myself:
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.
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.Reacted by FTE, CryptoAlgo, amineamami, Pedro Polez, Rodrigo Caldas, Felipe Grijó and Alexandre A. Bizri-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.
It's interesting to hear that Java ships with
javaandjavaw--ActiveState's Perl ships withperlandguiperlas well for this use-case.Reacted by FTEAnd Python ships with
pythonandpythonw. I'm not too sure if it's really worth the added complexity.Reacted by FTE+1 (even though I am Linux only, that option would be nice for the casual windows development)
Reacted by FTE and Zack Sargent+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).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).
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).
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.
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
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-exeReacted by Juan Picado, Antoine Marot, Preco, Pan and RodrigoClosing this because there's a solution available in the userland (thanks, @s-h-a-d-o-w). Feel free to reopen this.
Reacted by Franck Freiburger, eight, Aaron Haley, ulrichb and Niek van der MaasUhm, 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.
Reacted by eight, Alexander Trauzzi, Biru Mohanathas, Aaron Haley, ulrichb, Lorenzo Lapucci, Vanj, Jaid, Niek van der Maas and Felipe Grijó@s-h-a-d-o-w FWIW, the
node_main.ccpatch in my earlier comment addresses the feedback cursor as well.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. 😉
@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.
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.
Reacted by Loren Crain, Niklas Mischkulnig, Stan Behrens, Aaron Haley, Daniel Pereira and Felipe Grijó- addedstalledIssues and PRs manually marked as stalled and scheduled for automatic closure.Issues and PRs manually marked as stalled and scheduled for automatic closure.
on Nov 17, 2018 Can anyone help to achieve same for macos?
@bittu I always thought that MacOS is like Linux in this respect. Linux need no
nodew(as well asjavaw,pythonw,rubywetc), so does MaxOS.You can use this module:
create-windowless-appThis module:
- Create a "hello world" project structure (javascript or typescript) that compiles into an exe file (using nexe, with configurable nodejs version)
- Compiles a c# launcher (with an option to provide an icon) that can start the project exe in a silent mode. (source included)
You can use this module:
create-windowless-appThis module:
- Create a "hello world" project structure (javascript or typescript) that compiles into an exe file (using nexe, with configurable nodejs version)
- Compiles a c# launcher (with an option to provide an icon) that can start the project exe in a silent mode. (source included)
I just created a template repository from this module (if you prefer not to run it yourself)
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.
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
--backgroundor--hiddento 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?