For days now, I am trying to figure out how to execute an ExeFile with Specified Task in Delphi using ShellExecute. Below is my latest code giving my the error "The specified file was not found":
procedure TfrmGTX.btnQuickBooksSyncClick(Sender: TObject);
var
ExecuteResult : integer;
Path : string;
begin
Path := IncludeTrailingPathDelimiter(ExtractFilePath('MyApp.exe'));
ExecuteResult := ShellExecute(0, nil, PChar(Path + 'cd C:\Program Files
(x86)\Folder1\Folder2\MyApp.exe a_Sales /Connect'), nil, nil,
SW_SHOWNORMAL);
case ExecuteResult of
0 : ShowMessage('Error ' + IntToStr(ExecuteResult) + ': The
operating system is out of memory or resources.');
2 : ShowMessage('Error ' + IntToStr(ExecuteResult) + ': The
specified file was not found.');
3 : ShowMessage('Error ' + IntToStr(ExecuteResult) + ': The
specified path was not found.');
5 : ShowMessage('Error ' + IntToStr(ExecuteResult) + ': Windows 95
only: The operating system denied access to the specified
file.');
8 : ShowMessage('Error ' + IntToStr(ExecuteResult) + ': Windows 95
only: There was not enough memory to complete the operation.');
10 : ShowMessage('Error ' + IntToStr(ExecuteResult) + ': Wrong
Windows version.');
11 : ShowMessage('Error ' + IntToStr(ExecuteResult) + ': The .EXE
file is invalid (non-Win32 .EXE or error in .EXE image).');
12 : ShowMessage('Error ' + IntToStr(ExecuteResult) + ': Application
was designed for a different operating system.');
13 : ShowMessage('Error ' + IntToStr(ExecuteResult) + ': Application
was designed for MS-DOS 4.0.');
15 : ShowMessage('Error ' + IntToStr(ExecuteResult) + ': Attempt to
load a real-mode program.');
16 : ShowMessage('Error ' + IntToStr(ExecuteResult) + ': Attempt to
load a second instance of an application with non-readonly data
segments.');
19 : ShowMessage('Error ' + IntToStr(ExecuteResult) + ': Attempt to
load a compressed application file.');
20 : ShowMessage('Error ' + IntToStr(ExecuteResult) + ': Dynamic-
link library (DLL) file failure.');
26 : ShowMessage('Error ' + IntToStr(ExecuteResult) + ': A sharing
violation occurred.');
27 : ShowMessage('Error ' + IntToStr(ExecuteResult) + ': The
filename association is incomplete or invalid.');
28 : ShowMessage('Error ' + IntToStr(ExecuteResult) + ': The DDE
transaction could not be completed because the request timed
out.');
29 : ShowMessage('Error ' + IntToStr(ExecuteResult) + ': The DDE
transaction failed.');
30 : ShowMessage('Error ' + IntToStr(ExecuteResult) + ': The DDE
transaction could not be completed because other DDE
transactions were being processed.');
31 : ShowMessage('Error ' + IntToStr(ExecuteResult) + ': There is no
application associated with the given filename extension.');
32 : ShowMessage('Error ' + IntToStr(ExecuteResult) + ': Windows 95
only: The specified dynamic-link library was not found.');
else ShowMessage('Unknown Error.');
end;
end;
I am sure a small glitch I am missing here. Any help please...
Many thanks!
Update: Deleted this portion.
Solution: I removed the IncludeTrailingPathDelimiter andExtractFilePath, used ShellExecuteEx, and correct Parameters. And that's it, able to solve the problem.
procedure TfrmGTX.btnQBSyncClick(Sender: TObject);
var
FileName, Parameters, Folder, Directory: string;
sei: TShellExecuteInfo;
Error: DWORD;
OK: boolean;
begin
Folder := 'C:\Program Files (x86)\Folder1\Folder2\';
FileName := Folder + 'MyApp';
Parameters := 'MyTask';
ZeroMemory(@sei, SizeOf(sei));
sei.cbSize := SizeOf(sei);
sei.lpFile := PChar(FileName);
sei.lpParameters := PChar(Parameters);
sei.lpDirectory := PChar(Folder);
sei.nShow := SW_SHOWNORMAL;
OK := ShellExecuteEx(@sei);
if not OK then
begin
Error := GetLastError;
case Error of
0 : ShowMessage('Error ' + IntToStr(Error) + ': The operating system is out of memory or resources.');
2 : ShowMessage('Error ' + IntToStr(Error) + ': The specified file was not found.');
3 : ShowMessage('Error ' + IntToStr(Error) + ': The specified path was not found.');
5 : ShowMessage('Error ' + IntToStr(Error) + ': Windows 95 only: The operating system denied access to the specified file.');
8 : ShowMessage('Error ' + IntToStr(Error) + ': Windows 95 only: There was not enough memory to complete the operation.');
10 : ShowMessage('Error ' + IntToStr(Error) + ': Wrong Windows version.');
11 : ShowMessage('Error ' + IntToStr(Error) + ': The .EXE file is invalid (non-Win32 .EXE or error in .EXE image).');
12 : ShowMessage('Error ' + IntToStr(Error) + ': Application was designed for a different operating system.');
13 : ShowMessage('Error ' + IntToStr(Error) + ': Application was designed for MS-DOS 4.0.');
15 : ShowMessage('Error ' + IntToStr(Error) + ': Attempt to load a real-mode program.');
16 : ShowMessage('Error ' + IntToStr(Error) + ': Attempt to load a second instance of an application with non-readonly data segments.');
19 : ShowMessage('Error ' + IntToStr(Error) + ': Attempt to load a compressed application file.');
20 : ShowMessage('Error ' + IntToStr(Error) + ': Dynamic-link library (DLL) file failure.');
26 : ShowMessage('Error ' + IntToStr(Error) + ': A sharing violation occurred.');
27 : ShowMessage('Error ' + IntToStr(Error) + ': The filename association is incomplete or invalid.');
28 : ShowMessage('Error ' + IntToStr(Error) + ': The DDE transaction could not be completed because the request timed out.');
29 : ShowMessage('Error ' + IntToStr(Error) + ': The DDE transaction failed.');
30 : ShowMessage('Error ' + IntToStr(Error) + ': The DDE transaction could not be completed because other DDE transactions were being processed.');
31 : ShowMessage('Error ' + IntToStr(Error) + ': There is no application associated with the given filename extension.');
32 : ShowMessage('Error ' + IntToStr(Error) + ': Windows 95 only: The specified dynamic-link library was not found.');
else ShowMessage('Unknown Error.');
end;
end;
end;
The content of your ShellExecute
is invalid. If you must change directories, use the CHDIR
command first.
Also, you should pass parameters as an argument to the ShellExecute
call.
This is valid
ExecuteResult := ShellExecute(0, 'open', PChar('C:\Program Files (x86)\Intuit\QuickBooks Enterprise Solutions 18.0\qbw32.exe'), pchar('a_Sales /Connect'), nil, SW_SHOWNORMAL);