[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 13:43:18 UTC 2018


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/b662de98/attachment.html>


More information about the Vm-dev mailing list