Skip to content

Silent Mode execution #556

Description

@aleeksunder

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

  1. added
    windowsIssues and PRs related to the Windows platform.
    on Jan 22, 2015
  2. bnoordhuis commented on Jan 22, 2015

    @bnoordhuis
    Member

    /cc @piscisaureus - I remember previous discussions about this but I forgot the details.

  3. dougwilson commented on Jan 23, 2015

    @dougwilson
    Member

    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.

  4. piscisaureus commented on Jan 23, 2015

    @piscisaureus
    Contributor

    @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:

    • 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 WinMain entry 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.

  5. rvagg commented on Jan 23, 2015

    @rvagg
    Member

    Java ships with java and javaw for this reason and may be a model we can follow.

  6. piscisaureus commented on Jan 23, 2015

    @piscisaureus
    Contributor

    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.

  7. rvagg commented on Jan 24, 2015

    @rvagg
    Member

    -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.

  8. dougwilson commented on Jan 24, 2015

    @dougwilson
    Member

    It's interesting to hear that Java ships with java and javaw--ActiveState's Perl ships with perl and guiperl as well for this use-case.

  9. seishun commented on Jan 24, 2015

    @seishun
    Contributor

    And Python ships with python and pythonw. I'm not too sure if it's really worth the added complexity.

  10. BenSower commented on Jan 30, 2015

    @BenSower

    +1 (even though I am Linux only, that option would be nice for the casual windows development)

  11. silverwind commented on Feb 3, 2015

    @silverwind
    Contributor

    +1, I'd certainly see use of an "GUI" build for simple backgrounding of processes. I'd suggest setting a .js file type association to the gui app through the installer (I think .js to this date still associates with WSH).

  12. rvagg commented on Feb 3, 2015

    @rvagg
    Member

    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).

  13. silverwind commented on Feb 3, 2015

    @silverwind
    Contributor

    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).

  14. silverwind commented on Feb 4, 2015

    @silverwind
    Contributor

    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.

  15. aleeksunder commented on Feb 10, 2015

    @aleeksunder
    Author

    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...

  16. 27 remaining items

  17. s-h-a-d-o-w commented on May 22, 2018

    @s-h-a-d-o-w

    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

  18. ryzokuken commented on May 31, 2018

    @ryzokuken
    Contributor

    Closing this because there's a solution available in the userland (thanks, @s-h-a-d-o-w). Feel free to reopen this.

  19. s-h-a-d-o-w commented on Jun 1, 2018

    @s-h-a-d-o-w

    @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.

  20. poiru commented on Jun 1, 2018

    @poiru
    Contributor

    @s-h-a-d-o-w FWIW, the node_main.cc patch in my earlier comment addresses the feedback cursor as well.

  21. s-h-a-d-o-w commented on Jun 1, 2018

    @s-h-a-d-o-w

    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. 😉

  22. ryzokuken commented on Jun 6, 2018

    @ryzokuken
    Contributor

    @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.

  23. removed their assignment
    on Oct 12, 2018
  24. develar commented on Nov 17, 2018

    @develar

    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.

  25. added
    stalledIssues and PRs manually marked as stalled and scheduled for automatic closure.
    on Nov 17, 2018
  26. bittu commented on May 3, 2019

    @bittu

    Can anyone help to achieve same for macos?

  27. ukoloff commented on May 5, 2019

    @ukoloff

    @bittu I always thought that MacOS is like Linux in this respect. Linux need no nodew (as well as javaw, pythonw, rubyw etc), so does MaxOS.

  28. yoavain commented on Oct 3, 2019

    @yoavain
    Contributor

    You can use this module:
    create-windowless-app

    This module:

    1. Create a "hello world" project structure (javascript or typescript) that compiles into an exe file (using nexe, with configurable nodejs version)
    2. Compiles a c# launcher (with an option to provide an icon) that can start the project exe in a silent mode. (source included)
  29. yoavain commented on Sep 17, 2021

    @yoavain
    Contributor

    You can use this module:
    create-windowless-app

    This module:

    1. Create a "hello world" project structure (javascript or typescript) that compiles into an exe file (using nexe, with configurable nodejs version)
    2. 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)

  30. Niek commented on Feb 24, 2024

    @Niek

    Quite crazy that this is not a solved problem. For now I rely on cmd /c start /min node.exe file.js but that's far from ideal.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    feature requestIssues requesting new Node.js features.stalledIssues and PRs manually marked as stalled and scheduled for automatic closure.windowsIssues and PRs related to the Windows platform.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions