Aşağıdaki kod, belgeleri başlatılamıyor. 193 hatası alıyorum (% 1 geçerli bir Win32 uygulaması değil). Çalıştırılabilir başlatılıyor iyi çalışıyor. Dosyalar düzgün bir şekilde ilişkilendirilmiş, çift tıklandığında karşılık gelen uygulamayı başlatırlar. Ben komut satırını alıntı hakkında bilmek hata mesajı, CreateProcess şeyler vb (Örn Why is CreateProcess failing in Windows Server 2003 64-bit? için SO ve başka yerlerde aradık.Neden CreateProcess 193 hatası veriyor (% 1 geçerli bir Win32 uygulaması değil)
Bu bir Delphi XE2 (a Win7 64 bit Güncelleme 4) Win32 uygulaması VMWare VM.
kodu da ana makinede başarısız(Win7 64 bit) ve 32 bit XP ile bir sanal PC VM içinde.
Win7 VM (Excel 2003 ve Crimson başlamalıdır uygulamalar Editör) 32 bit
hata oluşursa hem IDE başlatırken veya test uygulaması
O Delphi2007 kodunu bu kod her yerde ince işler gelir derlenmiş D2007 uygulamasını eskiden standalone çalıştırırken.
Kodun nesi var? Jan
procedure StartProcess(WorkDir, Filename: string; Arguments : string = '');
var
StartupInfo : TStartupInfo;
ProcessInfo : TProcessInformation;
lCmd : string;
lOK : Boolean;
LastErrorCode: Integer;
begin
FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
StartupInfo.cb := SizeOf(TStartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := sw_Normal;
FillChar(ProcessInfo, SizeOf(TProcessInformation), 0);
lCmd := '"' + WorkDir + FileName + '"'; // Quotes are needed https://stackoverflow.com/questions/265650/paths-and-createprocess
if Arguments <> '' then lCmd := lCmd + ' ' + Arguments;
lOk := CreateProcess(nil,
PChar(lCmd),
nil,
nil,
FALSE, // TRUE makes no difference
0, // e.g. CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS makes no difference
nil,
nil, // PChar(WorkDir) makes no difference
StartupInfo,
ProcessInfo);
if lOk then
begin
try
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
finally
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
end;
end
else
begin
LastErrorCode := GetLastError;
ShowMessage(IntToStr(LastErrorCode) + ': ' + SysErrorMessage(LastErrorCode));
end;
end;
procedure TFrmStartProcess.Button1Click(Sender: TObject);
begin
StartProcess('c:\program files (x86)\axe3\','axe.exe'); // Works
end;
procedure TFrmStartProcess.Button2Click(Sender: TObject);
begin
StartProcess('d:\','klad.xls'); // Fails
end;
procedure TFrmStartProcess.Button3Click(Sender: TObject);
begin
StartProcess('d:\','smimime.txt'); // Fails
end;
kullanmak için
? – BugFinder
Ben Delphi aşina değilim, ancak WINAPI 'CreateProcess()' sadece 'exe's başlatmak için kullanılabilir. Diğer dosya türlerini _run_ istiyorsanız, ['ShellExecute()'] 'ı kullanmanız gerekir (http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153 (v = vs.85) .aspx). – hmjd
@hjmd Bu kod, önceki kod sürümünde, .XLS dosyalarını çağırarak çalışırdı. –