नीचे दिया गया कोड दस्तावेज़ प्रारंभ करने में विफल रहता है। मुझे त्रुटि मिलती है 1 9 3 (% 1 वैध Win32 ऐप नहीं है)। निष्पादन योग्य शुरू करना ठीक काम करता है। फ़ाइलें ठीक से जुड़े हुए हैं, डबल क्लिक होने पर वे संबंधित ऐप शुरू करते हैं। मैं इतना और कहीं त्रुटि संदेश, CreateProcess सामान आदि (जैसे Why is CreateProcess failing in Windows Server 2003 64-bit? मैं कमांड लाइन के हवाले से अवगत कराने के लिए खोज की है।CreateProcess त्रुटि क्यों देता है 1 9 3 (% 1 मान्य Win32 ऐप नहीं है)
यह एक डेल्फी XE2 (अपडेट 4) एक Win7 64 बिट में Win32 अनुप्रयोग VMWare वी एम।
कोड भी मेजबान मशीन पर विफल रहता है (Win7 64 बिट) और 32 बिट XP के साथ एक वर्चुअल पीसी वी एम में।
- क्षुधा है कि Win7 वी एम (Excel 2003 और क्रिमसन में शुरू कर देना चाहिए
संपादक) 32 बिट हैं।
विफलता होता है दोनों जब आईडीई से शुरू या जब चल परीक्षण ऐप स्वसंपूर्ण
यह Delphi2007 कोड है, जहां इस कोड को हर जगह ठीक काम करता है से आता है संकलित D2007 एप्लिकेशन हुआ करता था।
कोड के साथ क्या गलत है? यह लगभग रूप में अगर मैं बहुत स्पष्ट कुछ अनदेखी कर रहा हूँ ....
अग्रिम धन्यवाद,
जनवरी
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;
का प्रयोग करते हैं पिछले एक अगर आप विशेष पाठ फ़ाइल पर नोटपैड फोन के लिए क्या होता है करने के लिए? – BugFinder
मैं डेल्फी से परिचित नहीं हूं, लेकिन WINAPI 'CreateProcess() 'का उपयोग केवल' .exe 'शुरू करने के लिए किया जा सकता है। यदि अन्य प्रकार की फ़ाइलों को _run_ करना चाहते हैं जिन्हें आपको ['ShellExecute()'] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153 (v = vs.85) .aspx का उपयोग करने की आवश्यकता है)। – hmjd
@hjmd वह कोड पिछले कोड संस्करण में काम करने के लिए प्रयुक्त होता था, जो .XLS फ़ाइलों को कॉल करता था। –