Jump to page: 1 2
Thread overview
Reagan: CreateProcess()?
Jul 13, 2007
okibi
Jul 13, 2007
Regan Heath
Jul 13, 2007
okibi
Jul 13, 2007
Regan Heath
Jul 13, 2007
okibi
Jul 13, 2007
Regan Heath
Jul 16, 2007
Clay Smith
Jul 24, 2007
okibi
Jul 25, 2007
okibi
Sep 05, 2007
Clay Smith
Sep 26, 2007
okibi
Sep 26, 2007
Regan Heath
Sep 26, 2007
okibi
Sep 26, 2007
okibi
Sep 26, 2007
okibi
Re: Regan: CreateProcess()?
Sep 26, 2007
Regan Heath
Sep 26, 2007
okibi
Sep 26, 2007
Regan Heath
July 13, 2007
Hey Reagan,

I took your suggestion about getting system() to run without a window by creating a CreateProcess(). I looked at your example on:

http://www.digitalmars.com/d/archives/digitalmars/D/29556.html

I can't get it to compile! I'm getting an error for expecting type ulong on line 107 in your pipestream.d file.

Any ideas?

Thanks!
July 13, 2007
okibi wrote:
> Hey Reagan,
> 
> I took your suggestion about getting system() to run without a window by creating a CreateProcess(). I looked at your example on:
> 
> http://www.digitalmars.com/d/archives/digitalmars/D/29556.html
> 
> I can't get it to compile! I'm getting an error for expecting type ulong on line 107 in your pipestream.d file.
> 
> Any ideas?

Change seek to:

		override ulong seek(long offset, SeekPos whence)
		{
			assertSeekable();
			return 0;
		}

The pipestream isn't seekable so it never returns.

After doing that you get a problem with:

		HANDLE write = INVALID_HANDLE_VALUE;
		HANDLE read = INVALID_HANDLE_VALUE;

just remove the "= INVALID.." it's not really necessary as the constructor always assigns values to these.

There are several string/char[] changes, eg.

1)

class ProcessException : Exception
{
	version(Windows) {
		this(string msg) { super(msg ~ ": " ~ sysErrorString(GetLastError())); }
	}
	version(linux) {	
		//for some reason getErrno does not link for me?
		this(string msg) { super(msg ~ ": " ~ std.string.toString(strerror(getErrno()))); }
	}
}

2)

	string readLine()
	{
		return pout.readLine();
	}
	
	string readError()
	{
		return perr.readLine();
	}

	void writeLine(string line)
	{
		pin.writeLine(line);
	}

After that I think it should compile, I can't guarantee this code works however ;)

Tango has a tango.sys.Pipe and tango.sys.Process which probably do very similar stuff.

Regan
July 13, 2007
Well, I can compile and use the code now, but it still makes that darn window pop up. Is there ANYWAY to keep the black window from popping up?

Thanks!

Regan Heath Wrote:

> okibi wrote:
> > Hey Reagan,
> > 
> > I took your suggestion about getting system() to run without a window by creating a CreateProcess(). I looked at your example on:
> > 
> > http://www.digitalmars.com/d/archives/digitalmars/D/29556.html
> > 
> > I can't get it to compile! I'm getting an error for expecting type ulong on line 107 in your pipestream.d file.
> > 
> > Any ideas?
> 
> Change seek to:
> 
> 		override ulong seek(long offset, SeekPos whence)
> 		{
> 			assertSeekable();
> 			return 0;
> 		}
> 
> The pipestream isn't seekable so it never returns.
> 
> After doing that you get a problem with:
> 
> 		HANDLE write = INVALID_HANDLE_VALUE;
> 		HANDLE read = INVALID_HANDLE_VALUE;
> 
> just remove the "= INVALID.." it's not really necessary as the constructor always assigns values to these.
> 
> There are several string/char[] changes, eg.
> 
> 1)
> 
> class ProcessException : Exception
> {
> 	version(Windows) {
> 		this(string msg) { super(msg ~ ": " ~ sysErrorString(GetLastError())); }
> 	}
> 	version(linux) {
> 		//for some reason getErrno does not link for me?
> 		this(string msg) { super(msg ~ ": " ~
> std.string.toString(strerror(getErrno()))); }
> 	}
> }
> 
> 2)
> 
> 	string readLine()
> 	{
> 		return pout.readLine();
> 	}
> 
> 	string readError()
> 	{
> 		return perr.readLine();
> 	}
> 
> 	void writeLine(string line)
> 	{
> 		pin.writeLine(line);
> 	}
> 
> After that I think it should compile, I can't guarantee this code works however ;)
> 
> Tango has a tango.sys.Pipe and tango.sys.Process which probably do very similar stuff.
> 
> Regan

July 13, 2007
okibi wrote:
> Well, I can compile and use the code now, but it still makes that darn window pop up. Is there ANYWAY to keep the black window from popping up?


What are you running?  Show me your code which uses Process.

Regan
July 13, 2007
Well, I'm trying to open notepad. I just used your code and replace the Process command being issued.

Thanks!

Regan Heath Wrote:

> okibi wrote:
> > Well, I can compile and use the code now, but it still makes that darn window pop up. Is there ANYWAY to keep the black window from popping up?
> 
> 
> What are you running?  Show me your code which uses Process.
> 
> Regan

July 13, 2007
okibi wrote:
> Well, I'm trying to open notepad. I just used your code and replace the Process command being issued.

The idea was that you do something like:

Process notepad = new Process(r"c:\windows\notepad.exe");

but when I did that I got a few more char[]/string errors, fixing those gives me an application error for notepad, not sure why (probably it expects certain enviroment variables or something, who knows)

So, I don't get the same results as you :(

I suggest you look at Tango, try and use the Process class in there.

I'm busy this weekend otherwise I'd try and tidy it up and get it working.  I might have a look at it next week some time.

Till then I'm afraid you're on your own.

Regan
July 16, 2007
okibi wrote:
> Hey Reagan,
> 
> I took your suggestion about getting system() to run without a window by creating a CreateProcess(). I looked at your example on:
> 
> http://www.digitalmars.com/d/archives/digitalmars/D/29556.html
> 
> I can't get it to compile! I'm getting an error for expecting type ulong on line 107 in your pipestream.d file.
> 
> Any ideas?
> 
> Thanks!

Here you go:

Windows info:
http://paste.dprogramming.com/dptyg7pt.php

Create Process:
http://paste.dprogramming.com/dpsgva0j.php

You can use execProcess or my ChildProcesses class.

~ Clay
July 24, 2007
The globals module is missing. Where can I find it?

Thanks!

Clay Smith Wrote:

> okibi wrote:
> > Hey Reagan,
> > 
> > I took your suggestion about getting system() to run without a window by creating a CreateProcess(). I looked at your example on:
> > 
> > http://www.digitalmars.com/d/archives/digitalmars/D/29556.html
> > 
> > I can't get it to compile! I'm getting an error for expecting type ulong on line 107 in your pipestream.d file.
> > 
> > Any ideas?
> > 
> > Thanks!
> 
> Here you go:
> 
> Windows info:
> http://paste.dprogramming.com/dptyg7pt.php
> 
> Create Process:
> http://paste.dprogramming.com/dpsgva0j.php
> 
> You can use execProcess or my ChildProcesses class.
> 
> ~ Clay

July 25, 2007
Well, I can take out the import and comment out off the directory settings and the function works, however I need to give the full path of the command.

However, it won't let me run batch scripts through the function at all. And for commands that take arguments, I seem to need to send it through a cmd prompt, which opens a window obviously. The only thing that really helped was the ability to choose whether to wait for the exit code or not.

Is the fact that the directory stuff is missing as well as the globals file causing this issue?

thanks!

okibi Wrote:

> The globals module is missing. Where can I find it?
> 
> Thanks!
> 
> Clay Smith Wrote:
> 
> > okibi wrote:
> > > Hey Reagan,
> > > 
> > > I took your suggestion about getting system() to run without a window by creating a CreateProcess(). I looked at your example on:
> > > 
> > > http://www.digitalmars.com/d/archives/digitalmars/D/29556.html
> > > 
> > > I can't get it to compile! I'm getting an error for expecting type ulong on line 107 in your pipestream.d file.
> > > 
> > > Any ideas?
> > > 
> > > Thanks!
> > 
> > Here you go:
> > 
> > Windows info:
> > http://paste.dprogramming.com/dptyg7pt.php
> > 
> > Create Process:
> > http://paste.dprogramming.com/dpsgva0j.php
> > 
> > You can use execProcess or my ChildProcesses class.
> > 
> > ~ Clay
> 

September 05, 2007
The globals file is not necessary, just replace globals.programDir with the location of the program directory as a char[].

execProcess(char[] program, char[] args, bool requireExitCode=true)

you don't need to run from cmd prompt to set program arguments, just do

execProcess("C:\svn\svn.exe", "co svn.dsource.org");

For batch scripts, use C:\systemwhatever\cmd.exe as program name and batch.bat as the argument, that is supposed to work.

~ Clay

okibi wrote:
> Well, I can take out the import and comment out off the directory settings and the function works, however I need to give the full path of the command. 
> 
> However, it won't let me run batch scripts through the function at all. And for commands that take arguments, I seem to need to send it through a cmd prompt, which opens a window obviously. The only thing that really helped was the ability to choose whether to wait for the exit code or not.
> 
> Is the fact that the directory stuff is missing as well as the globals file causing this issue?
> 
> thanks!
> 
> okibi Wrote:
> 
>> The globals module is missing. Where can I find it?
>>
>> Thanks!
>>
>> Clay Smith Wrote:
>>
>>> okibi wrote:
>>>> Hey Reagan,
>>>>
>>>> I took your suggestion about getting system() to run without a window by creating a CreateProcess(). I looked at your example on:
>>>>
>>>> http://www.digitalmars.com/d/archives/digitalmars/D/29556.html
>>>>
>>>> I can't get it to compile! I'm getting an error for expecting type ulong on line 107 in your pipestream.d file.
>>>>
>>>> Any ideas?
>>>>
>>>> Thanks!
>>> Here you go:
>>>
>>> Windows info:
>>> http://paste.dprogramming.com/dptyg7pt.php
>>>
>>> Create Process:
>>> http://paste.dprogramming.com/dpsgva0j.php
>>>
>>> You can use execProcess or my ChildProcesses class.
>>>
>>> ~ Clay
> 
« First   ‹ Prev
1 2