summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCheng Zhao <zcbenz@gmail.com>2021-08-09 20:02:50 +0900
committerMichaƫl Zasso <targos@protonmail.com>2021-08-22 08:48:27 +0200
commit3f284cf65c3d26b5ec73ed15b81befc4671ed596 (patch)
tree47e68f97cc74eec8bea1e8edde4be7c4fe47af3a
parent3041d572019c7d75cd32bca11c818e6ab1065d73 (diff)
downloadnode-new-3f284cf65c3d26b5ec73ed15b81befc4671ed596.tar.gz
build: add option to hide console window
Adds a Environment flag to allow embedders to set CREATE_NO_WINDOW property when spawning processes, which is useful for GUI programs that do not want to show console windows when running terminal commands. PR-URL: https://github.com/nodejs/node/pull/39712 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Shelley Vohr <shelley.vohr@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
-rw-r--r--src/env-inl.h4
-rw-r--r--src/env.h1
-rw-r--r--src/node.h6
-rw-r--r--src/node_worker.cc2
-rw-r--r--src/process_wrap.cc4
5 files changed, 16 insertions, 1 deletions
diff --git a/src/env-inl.h b/src/env-inl.h
index b3b1ea9082..061897d95d 100644
--- a/src/env-inl.h
+++ b/src/env-inl.h
@@ -877,6 +877,10 @@ inline bool Environment::tracks_unmanaged_fds() const {
return flags_ & EnvironmentFlags::kTrackUnmanagedFds;
}
+inline bool Environment::hide_console_windows() const {
+ return flags_ & EnvironmentFlags::kHideConsoleWindows;
+}
+
bool Environment::filehandle_close_warning() const {
return emit_filehandle_warning_;
}
diff --git a/src/env.h b/src/env.h
index 24b4a48b5f..8760bc4361 100644
--- a/src/env.h
+++ b/src/env.h
@@ -1198,6 +1198,7 @@ class Environment : public MemoryRetainer {
inline bool owns_process_state() const;
inline bool owns_inspector() const;
inline bool tracks_unmanaged_fds() const;
+ inline bool hide_console_windows() const;
inline uint64_t thread_id() const;
inline worker::Worker* worker_context() const;
Environment* worker_parent_env() const;
diff --git a/src/node.h b/src/node.h
index 4348dfba5b..676d1d5fba 100644
--- a/src/node.h
+++ b/src/node.h
@@ -402,7 +402,11 @@ enum Flags : uint64_t {
kNoRegisterESMLoader = 1 << 3,
// Set this flag to make Node.js track "raw" file descriptors, i.e. managed
// by fs.open() and fs.close(), and close them during FreeEnvironment().
- kTrackUnmanagedFds = 1 << 4
+ kTrackUnmanagedFds = 1 << 4,
+ // Set this flag to force hiding console windows when spawning child
+ // processes. This is usually used when embedding Node.js in GUI programs on
+ // Windows.
+ kHideConsoleWindows = 1 << 5
};
} // namespace EnvironmentFlags
diff --git a/src/node_worker.cc b/src/node_worker.cc
index 43a3862cc6..3e3cb67d9e 100644
--- a/src/node_worker.cc
+++ b/src/node_worker.cc
@@ -558,6 +558,8 @@ void Worker::New(const FunctionCallbackInfo<Value>& args) {
CHECK(args[4]->IsBoolean());
if (args[4]->IsTrue() || env->tracks_unmanaged_fds())
worker->environment_flags_ |= EnvironmentFlags::kTrackUnmanagedFds;
+ if (env->hide_console_windows())
+ worker->environment_flags_ |= EnvironmentFlags::kHideConsoleWindows;
}
void Worker::StartThread(const FunctionCallbackInfo<Value>& args) {
diff --git a/src/process_wrap.cc b/src/process_wrap.cc
index 45920c2603..679429286b 100644
--- a/src/process_wrap.cc
+++ b/src/process_wrap.cc
@@ -238,6 +238,10 @@ class ProcessWrap : public HandleWrap {
options.flags |= UV_PROCESS_WINDOWS_HIDE;
}
+ if (env->hide_console_windows()) {
+ options.flags |= UV_PROCESS_WINDOWS_HIDE_CONSOLE;
+ }
+
// options.windows_verbatim_arguments
Local<Value> wva_v =
js_options->Get(context, env->windows_verbatim_arguments_string())