[Vm-dev] [Pharo-dev] LibC system pops up a CMD.exe window in Windows 10 (Pharo 6.1)

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Tue Dec 11 20:01:41 UTC 2018


And if you are using
https://github.com/astares/Pharo-OS-Windows/blob/master/src/OS-Windows-Environment/WinProcess.class.st
rather than the OSProcess plugin, then it's a bit more involved to make the
changes, because you must also redirect the I/O thru a pipe, but it's
doable too.

Le mar. 11 déc. 2018 à 14:43, Nicolas Cellier <
nicolas.cellier.aka.nice at gmail.com> a écrit :

> I've checked: it's a one liner to be changed in
> https://github.com/OpenSmalltalk/opensmalltalk-vm/blob/Cog/src/plugins/Win32OSProcessPlugin/Win32OSProcessPlugin.c
> near line 826
> Since this is generated code from VMMaker, the code has to be changed in
> slang.
> IMO, there should be a boolean argument (optional) telling if we want to
> open the console or not.
> IMO false by default would be a good thing, though true for backward
> compatibility is also a possible alternative...
>
> Le mar. 11 déc. 2018 à 12:56, Nicolas Cellier <
> nicolas.cellier.aka.nice at gmail.com> a écrit :
>
>> It is possible, ask stack overflow
>>
>> https://stackoverflow.com/questions/4743559/how-to-execute-child-console-programs-without-showing-the-console-window-from-th
>>
>> https://stackoverflow.com/questions/18841971/hide-console-window-while-running-a-command-through-c?r=SearchResults
>>
>> I've recently "fixed" my own script in Visualworks so as to use these low
>> level API (already procided by VW)
>>
>>       BOOL CreateProcessW(
>>                     LPCWSTR imageName,
>>                     LPCWSTR commandLine,
>>                     struct SECURITY_ATTRIBUTES *pSecurity,
>>                     struct SECURITY_ATTRIBUTES *tSecurity,
>>                     BOOL inheritHandles,
>>                     DWORD creationFlags,
>>                     LPVOID environment,
>>                     LPWSTR currentDirectoryName,
>>                     struct STARTUPINFO *startupInfo,
>>                     struct PROCESS_INFORMATION *processInfo)
>>
>> First argument is fullpath to cmd.exe (take it from environment variable
>> 'ComSpec')
>> Second argument is '/u /c ' ,  'your command here encoded in utf16'
>> Security arguments are nil and nil
>> inheritHandles is true
>> creationFlags is zero
>> environment is nil
>> currentDirectoryName is nil
>>
>> startupInfo is more involved: it must be used to pass the pair of pipes
>> (handles) for input/output:
>> struct STARTUPINFO {
>>             DWORD    cb;
>>             LPTSTR        lpReserved;
>>             LPTSTR        lpDesktop;
>>             LPTSTR        lpTitle;
>>             DWORD        dwX;
>>             DWORD        dwY;
>>             DWORD        dwXSize;
>>             DWORD        dwYSize;
>>             DWORD        dwXCountChars;
>>             DWORD        dwYCountChars;
>>             DWORD        dwFillAttribute;
>>             DWORD        dwFlags;
>>             WORD        wShowWindow;
>>             WORD        cbReserved2;
>>             LPBYTE        lpReserved2;
>>             HANDLE    hStdInput;
>>             HANDLE    hStdOutput;
>>             HANDLE    hStdError;
>> }
>>
>> You initialize it with void GetStartupInfoW(LPSTARTUPINFO lpStartupInfo)
>> IMPORTANT: set wShowWindow to 0,
>> and then pass the input/output/error handles in last three fields.
>>
>> processInfo will contain information on output and must be allocated
>> struct PROCESS_INFORMATION {
>>             HANDLE hProcess;
>>             HANDLE hThread;
>>             DWORD dwProcessId;
>>             DWORD dwThreadId;
>>         }
>>
>> you can then get exit status thru BOOL GetExitCodeProcess call, close the
>> pipes, etc...
>>
>>
>> Le mar. 11 déc. 2018 à 10:08, Christopher Fuhrman <
>> christopher.fuhrman at inria.fr> a écrit :
>>
>>> Thanks Peter. That looks like a cool package. I guess I will live with
>>> it for now, because I don't want to code too much of a platform-specific
>>> solution (yet).
>>>
>>> On Mon, 10 Dec 2018 at 21:16, Peter Uhnak <i.uhnak at gmail.com> wrote:
>>>
>>>> This is normal (and much lamented) behavior of cmd. There's
>>>> https://github.com/astares/Pharo-OS-Windows which implements parts of
>>>> the WinAPI... with which one can create headless windows. (I think it
>>>> should be also available in the catalog).
>>>>
>>>> Peter
>>>>
>>>> On Mon, Dec 10, 2018 at 11:47 AM Christopher Fuhrman <
>>>> christopher.fuhrman at inria.fr> wrote:
>>>>
>>>>> Hello,
>>>>>
>>>>> My Git data mining API in Pharo 6.1 uses "LibC uniqueInstance system:
>>>>> 'some commands'" which has an annoying side effect of popping up a window
>>>>> (which steals the GUI focus in Windows 10). Maybe it's the same on MacOS
>>>>> and Linux?
>>>>>
>>>>> As such, I can't use my Windows PC to do anything else when the mining
>>>>> process is running (it can take several minutes). I'm not able to use
>>>>> Pharo's OSProcess or OSSubprocess because they don't support Windows (yet?).
>>>>>
>>>>> I tried creating a separate Windows Desktop (feature of Windows 10),
>>>>> but the CMD.EXE window manages to pop up there, too - almost seems like a
>>>>> windows bug.
>>>>>
>>>>> Does anyone know of a way to have the LibC window not pop up?
>>>>>
>>>>> Cheers,
>>>>>
>>>>> Christopher
>>>>>
>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20181211/f28493f3/attachment-0001.html>


More information about the Vm-dev mailing list