diff --git a/win32.h b/win32.h
index a4f1be3614d4d84e6d107df7efcd8d5c09a178a2..b2410f14edeb8c9fbfa0613baa75c7df78fe8134 100644
--- a/win32.h
+++ b/win32.h
@@ -75,7 +75,8 @@ inline DWORD daemon(const std::wstring& path, bool wait_app_exit = true, bool sh
 	si.dwFlags |= STARTF_USESHOWWINDOW;
 	si.wShowWindow = show ? SW_SHOW : SW_HIDE;
 	PROCESS_INFORMATION pi;
-	BOOL bRet = CreateProcessW(NULL, (LPWSTR)(path.c_str()), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
+	DWORD dwCreationFlags = show ? 0 : CREATE_NO_WINDOW;
+	BOOL bRet = CreateProcessW(NULL, (LPWSTR)(path.c_str()), NULL, NULL, FALSE, dwCreationFlags, NULL, NULL, &si, &pi);
 	if (bRet) {
 		WaitForSingleObject(pi.hProcess, wait_app_exit ? INFINITE : 0);
 		DWORD dwExit;