0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 8.0.0501: on MS-Windows ":!start" does not work as expected

Problem:    On MS-Windows ":!start" does not work as expected.
Solution:   When creating a process fails try passing the argument to
            ShellExecute().  (Katsuya Hino, closes #1570)
This commit is contained in:
Bram Moolenaar
2017-03-21 19:29:26 +01:00
parent 3c2881dc11
commit b2964f2570
3 changed files with 42 additions and 4 deletions

View File

@@ -4008,6 +4008,28 @@ vim_create_process(
}
static HINSTANCE
vim_shell_execute(
char *cmd,
INT n_show_cmd)
{
#ifdef FEAT_MBYTE
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
{
WCHAR *wcmd = enc_to_utf16((char_u *)cmd, NULL);
if (wcmd != NULL)
{
HINSTANCE ret;
ret = ShellExecuteW(NULL, NULL, wcmd, NULL, NULL, n_show_cmd);
vim_free(wcmd);
return ret;
}
}
#endif
return ShellExecute(NULL, NULL, cmd, NULL, NULL, n_show_cmd);
}
#if defined(FEAT_GUI_W32) || defined(PROTO)
/*
@@ -4711,6 +4733,7 @@ mch_call_shell(
STARTUPINFO si;
PROCESS_INFORMATION pi;
DWORD flags = CREATE_NEW_CONSOLE;
INT n_show_cmd = SW_SHOWNORMAL;
char_u *p;
ZeroMemory(&si, sizeof(si));
@@ -4729,6 +4752,7 @@ mch_call_shell(
cmdbase = skipwhite(cmdbase + 4);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWMINNOACTIVE;
n_show_cmd = SW_SHOWMINNOACTIVE;
}
else if ((STRNICMP(cmdbase, "/b", 2) == 0)
&& VIM_ISWHITE(cmdbase[2]))
@@ -4800,6 +4824,9 @@ mch_call_shell(
*/
if (vim_create_process((char *)newcmd, FALSE, flags, &si, &pi))
x = 0;
else if (vim_shell_execute((char *)newcmd, n_show_cmd)
> (HINSTANCE)32)
x = 0;
else
{
x = -1;