On Mon, 16 Dec 2013 02:04:10 +0100, Danny Arends wrote:
...
So I think this should work:

spawnProcess([appexe,format("/INI=%s",appini)],
["",""],Config.suppressConsole);


Hmm... that did not work either, it complained that the parameter was not correct. Actually, the syntax I was using should have worked (according to documentation, second overload of spawnProcess), and I also (unsuccessfully) tried with function execute.

Anyway, since my launcher will only be run from Windows, finally I decided to call ShellExecuteA directly (I find it less cumbersome to use and actually more elegant).

However, something is bothering me: when running the launcher, it opens a console temporarily before launching the other process (even when I am not using std.stdio) and I cannot get rid of this behavior.

This is the code I am now using:

import std.file: exists, getcwd;
import std.path: buildPath, dirName;
import std.string: format, toStringz;
import core.sys.windows.windows;

immutable static auto appname = "myapp";

extern(Windows) HANDLE ShellExecuteA(HWND, LPCSTR, LPCSTR, LPCSTR, LPCSTR, int);

int main(string[] args) {
  auto appath = getcwd();
  auto appexe = buildPath(appath, appname ~ ".exe");
  if (exists(appexe)) {
auto param = format(`/ini="%s"`, buildPath(appath, appname ~ ".ini")); ShellExecuteA(null, "", toStringz(appexe), toStringz(param), "", SW_SHOWMAXIMIZED);
    scope(failure) return -1;
  }
  return 0;
}

Why does the console window appear and how can I prevent this?

Regards, Hugo

Reply via email to