-
May 12th, 2009, 06:01 AM
#1
C++ Winapi - System(), CreateProcess, ShellExecute
So, I need to have some things uninstalled and as the user, I can uninstall anything, so the format of the string can be anything:
Here are some for example
Code:
MsiExec.exe /I{A040AC77-C1AA-4CC9-8931-9F648AF178F6}
RunDll32 C:\PROGRA~1\COMMON~1\INSTAL~1\engine\6\INTEL3~1\Ctor.dll,LaunchSetup "C:\Program Files\InstallShield Installation Information\{8B12BA86-ADAC-4BA6-B441-FFC591087252}\Setup.exe" /uninstall
C:\WINDOWS\IsUninst.exe -fC:\Program Files\TOSHIBA\Power Saver\Uninst.isu" -c"C:\WINDOWS\system32\TPSDel.dll
"C:\Program Files\Windows Media Player\wmsetsdk.exe" /UninstallAll
rundll32.exe "C:\Program Files\Synaptics\SynTP\SynISDLL.dll",standAloneUninstall
C:\WINDOWS\system32\\MSIEXEC.EXE /x {9541FED0-327F-4df0-8B96-EF57EF622F19}
"C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Updates\hotfix.exe" "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Updates\M928366\M928366Uninstall.msp"
C:\PROGRA~1\MAGICD~1\UNWISE.EXE C:\PROGRA~1\MAGICD~1\INSTALL.LOG
RUNDLL32.EXE C:\WINDOWS\system32\ialmrem.dll,UninstallW2KIGfx2ID PCI\VEN_8086&DEV_27A6 PCI\VEN_8086&DEV_27A2
As the person writing the code:
I could use system(variable); and everything would be all good, except for the cmd box that pops up with it.
I could use ShellExecute with some of them working (as long as i removed beginning and trailing quotes), and having the programs mem usage jump from about 4,000K to 6,000K and try to figure out how to get the rest to work
or I could use CreateProcess, which doesnt change mem usage that much (which is why i was wanting to use it) but for all entries brings up "The application failed to initialize properly (0xc0000005)". (0xc0000005) is an access violation memory error. This is actually quite weird since just a day or two ago, CreateProcess was acting more like what ShellExecute was doing. Don't ask me what I had when this was happening...I have changed much of my code since then, but the below is basically what I had to execute it.
Code:
void StartProcess(char* szExe)
{
STARTUPINFO startupInfo;
PROCESS_INFORMATION processInfo;
ZeroMemory( &startupInfo, sizeof(processInfo) );
startupInfo.cb = sizeof(startupInfo);
ZeroMemory( &processInfo, sizeof(processInfo) );
if (CreateProcess(0, szExe, 0, 0, FALSE, 0, 0, 0, &startupInfo, &processInfo))
{
WaitForSingleObject( processInfo.hProcess, INFINITE );
}
else
{
MessageBox(NULL, szExe, "", MB_OK); //just using this to see what shows and doesnt show...will change eventually.
}
CloseHandle( processInfo.hProcess );
CloseHandle( processInfo.hThread );
}
So, I could try to use ShellExecute, but then I would have to figure out a way to parse every single known format, but because people have their different preferences it would almost be endless, in my opinion
or if there was a way to do something like system() but without the console application box..then that would be awesome...
any ideas?
-
May 12th, 2009, 02:53 PM
#2
Re: C++ Winapi - System(), CreateProcess, ShellExecute
Code:
STARTUPINFO startupInfo;
PROCESS_INFORMATION processInfo;
ZeroMemory( &startupInfo, sizeof(processInfo) );
startupInfo.cb = sizeof(startupInfo);
ZeroMemory( &processInfo, sizeof(processInfo) );
'startupInfo' is not the same type as 'processInfo'. I don't think they are the same size...
Viggy
-
May 13th, 2009, 06:59 AM
#3
Re: C++ Winapi - System(), CreateProcess, ShellExecute
Wow, I didn't notice that, obviously. Thanks. Things are working now.
-
May 13th, 2009, 12:13 PM
#4
Re: C++ Winapi - System(), CreateProcess, ShellExecute
No problem!
Viggy
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|