Commit for development environment setup
This commit is contained in:
@@ -0,0 +1,142 @@
|
||||
/*********************************************************************************************
|
||||
* Copyright 2002 - Volian Enterprises, Inc. All rights reserved.
|
||||
* Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
|
||||
* ------------------------------------------------------------------------------
|
||||
* $Workfile: WinExeClass.cpp $ $Revision: 3 $
|
||||
* $Author: Jsj $ $Date: 12/16/03 11:59a $
|
||||
*
|
||||
* $History: WinExeClass.cpp $
|
||||
*
|
||||
* ***************** Version 3 *****************
|
||||
* User: Jsj Date: 12/16/03 Time: 11:59a
|
||||
* Updated in $/LibSource/WinExeClass
|
||||
* modified to all use in .net 1.0 and .net 1.1
|
||||
*
|
||||
* ***************** Version 2 *****************
|
||||
* User: Jsj Date: 1/06/03 Time: 9:52a
|
||||
* Updated in $/LibSource/WinExeClass
|
||||
* fixed problem of running a C# program - was returning to main process
|
||||
* before completing spawned process
|
||||
*
|
||||
* ***************** Version 1 *****************
|
||||
* User: Jsj Date: 8/23/02 Time: 2:57p
|
||||
* Created in $/LibSource/WinExeClass
|
||||
*********************************************************************************************/
|
||||
|
||||
// This is the main DLL file.
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "WinExeClass.h"
|
||||
|
||||
using namespace WinExeClass;
|
||||
|
||||
// Spawn off another process and run the passed in program.
|
||||
// Note that the documentation for WinExec() says that it's provided
|
||||
// for 16-bit windows compatibility and that applications should use
|
||||
// the CreateProcess function. So this class gives you access to
|
||||
// either the WinExe() or the CreateProcess() functions, just in case
|
||||
// one works better than the other for your current programming needs.
|
||||
|
||||
bool CLWinExec::RunWinExe(char *prgName)
|
||||
{
|
||||
bool RtnVal = false;
|
||||
RtnVal = DoWinExe(prgName);
|
||||
return RtnVal;
|
||||
}
|
||||
|
||||
bool CLWinExec::RunCreateProcess(char *prgName)
|
||||
{
|
||||
bool RtnVal = false;
|
||||
RtnVal = DoCreateProcess(prgName);
|
||||
return RtnVal;
|
||||
}
|
||||
|
||||
bool CLWinExec::RunWinExe(String *prgName)
|
||||
{
|
||||
USES_CONVERSION;
|
||||
bool RtnVal = false;
|
||||
// UINT hInst;
|
||||
|
||||
// Grab the program name from the String class and place
|
||||
// in a NUll terminated char array.
|
||||
// Note that String uses unicode chars so not every character
|
||||
// can be convert to the char array. But this works for
|
||||
// what we currently need.
|
||||
int len;
|
||||
char *tmpstr;
|
||||
len = (prgName->get_Length)();
|
||||
tmpstr = new char(len + 1);
|
||||
ZeroMemory(tmpstr,len+1);
|
||||
for (int i=0; i < len; i++)
|
||||
tmpstr[i] = (prgName->get_Chars)(i);
|
||||
|
||||
RtnVal = DoWinExe(tmpstr);
|
||||
|
||||
return RtnVal;
|
||||
}
|
||||
|
||||
|
||||
bool CLWinExec::RunCreateProcess(String *prgName)
|
||||
{
|
||||
USES_CONVERSION;
|
||||
bool RtnVal = false;
|
||||
// UINT hInst;
|
||||
|
||||
// Grab the program name from the String class and place
|
||||
// in a NUll terminated char array.
|
||||
// Note that String uses unicode chars so not every character
|
||||
// can be convert to the char array. But this works for
|
||||
// what we currently need.
|
||||
int len;
|
||||
char tmpstr[256];
|
||||
len = (prgName->get_Length)();
|
||||
// tmpstr = new char[len + 1];
|
||||
ZeroMemory(tmpstr,len+1);
|
||||
for (int i=0; i < len; i++)
|
||||
tmpstr[i] = (prgName->get_Chars)(i);
|
||||
|
||||
RtnVal = DoCreateProcess(tmpstr);
|
||||
|
||||
return RtnVal;
|
||||
}
|
||||
|
||||
|
||||
bool CLWinExec::DoWinExe(char *prgName)
|
||||
{
|
||||
bool RtnVal = false;
|
||||
UINT hInst;
|
||||
|
||||
hInst = WinExec(prgName,SW_NORMAL);
|
||||
if (hInst > 31){
|
||||
RtnVal = true;
|
||||
// Wait until child process exits.
|
||||
WaitForSingleObject((HANDLE)hInst,INFINITE);
|
||||
}
|
||||
return RtnVal;
|
||||
}
|
||||
|
||||
bool CLWinExec::DoCreateProcess(char *prgName)
|
||||
{
|
||||
bool RtnVal = false;
|
||||
STARTUPINFO procIn;
|
||||
PROCESS_INFORMATION procOut;
|
||||
|
||||
ZeroMemory(&procIn,sizeof(procIn));
|
||||
ZeroMemory(&procOut,sizeof(procOut));
|
||||
|
||||
procIn.dwFlags = STARTF_FORCEOFFFEEDBACK;
|
||||
procIn.cb = sizeof(STARTUPINFO);
|
||||
|
||||
// if (CreateProcess(prgName,NULL,NULL,NULL,FALSE,CREATE_SEPARATE_WOW_VDM,NULL,NULL,&procIn,&procOut))
|
||||
if (CreateProcess(NULL,prgName,NULL,NULL,FALSE,0,NULL,NULL,&procIn,&procOut))
|
||||
{
|
||||
RtnVal = true; // process completed normally
|
||||
// Wait until child process exits.
|
||||
WaitForSingleObject(procOut.hProcess,INFINITE);
|
||||
// Close process and thread handles.
|
||||
CloseHandle(procOut.hProcess);
|
||||
CloseHandle(procOut.hThread);
|
||||
}
|
||||
return RtnVal;
|
||||
}
|
Reference in New Issue
Block a user