On 01 Nov 2002 08:40:20 -0800, Alexandre Julliard julliard@winehq.com wrote :
No, it's wrong. You should be using the Windows API (CreateProcess etc.) not the Unix popen(). Then you can build a proper MSVCRT_FILE.
Sorry, I had a few beers tonight ;) Ok, I just remembered what my concerns were about using CreateProcess initially when I looked at MSDN:
CreateProcess executes a Windows executable with parameters, whereas _popen executes as shell, ie. you can do stuff like _popen("dir/w") which will return an open file in which you can read the directory contents from. In essence under Windows, this gets executed at "cmd.exe /C dir/w".
Now using CreatePorcess we can potentially do the same, provided that the executable (command interpreter) resides in your path. From MSDN:
"The string can specify the full path and file name of the module to execute or it can specify a partial name. In the case of a partial name, the function uses the current drive and current directory to complete the specification."
Now wera are faced with a problem in that wcmd is not a pure Windows application and it doesn't reside in your Windows filesystem, rather it is in your *nix path.
In the case of _popen, a file-handle is returned which allows you to either read or write to the application unsing the normal fwrite/fprintf/etc. commands. CreateProcess has an information structure containing the following information:
typedef struct _PROCESS_INFORMATION { HANDLE hProcess; HANDLE hThread; DWORD dwProcessId; DWORD dwThreadId; } PROCESS_INFORMATION;
I don't see any clear way of doing,
1. Converting the above structure into something usable, eg. MSVCRT_FILE 2. Actually allowing us to read or write to the application
Potentially the magic lies in the current Wine CreateProcess implementation, I'll have a look at it. Is doing this really feasable using the CreateProcess family? In essence a HANDLE will map back to an fd with the wine implementation (rather we can get an fd for a HANDLE), but can this be used to read/write to the process? The first obstacle however, will be in having a clean way to get wcmd going if it doesn't reside in C:. Maybe it should be there and should be installed like notepad.exe for example?
Some questions, and yes I'm slow tonight... :) I think that just by typing this some concerns have been aleviated so excuse my rumblings but just check the logic.
Greetings, Jaco