Mã bên dưới không khởi động được tài liệu. Tôi gặp lỗi 193 (% 1 không phải là một ứng dụng Win32 hợp lệ). Bắt đầu thực thi hoạt động tốt. Các tệp được liên kết đúng cách, chúng bắt đầu ứng dụng tương ứng khi nhấp đúp. Tôi đã tìm kiếm SO và các nơi khác cho các thông báo lỗi, công cụ CreateProcess vv (Ví dụ Why is CreateProcess failing in Windows Server 2003 64-bit? tôi biết về trích dẫn dòng lệnh.Tại sao CreateProcess cung cấp lỗi 193 (% 1 không phải là một ứng dụng Win32 hợp lệ)
Đây là một Delphi XE2 (Cập nhật 4) ứng dụng Win32 trong một 64bit Win7 VMWare VM.
mã này cũng không thành công trên máy chủ (Win7 64 bit) và tại một máy tính ảo VM với 32bit XP.
các ứng dụng mà nên bắt đầu trong Win7 VM (Excel 2003 và Crimson Trình chỉnh sửa) là 32 bit.
Sự thất bại xảy ra cả khi bắt đầu từ IDE hoặc khi chạy ứng dụng thử nghiệm độc
Nó được sử dụng để được mã Delphi2007, ứng dụng D2007 biên soạn nơi mã này xuất phát từ tác phẩm mỹ ở khắp mọi nơi.
Có vấn đề gì với mã? Nó gần như thể tôi đang nhìn cái gì đó rất rõ ràng ....
Cảm ơn trước,
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;
gì sẽ xảy ra cho nói cuối cùng một nếu bạn đặc biệt gọi notepad vào file văn bản không? – BugFinder
Tôi không quen thuộc với Delphi, nhưng WINAPI 'CreateProcess()' có thể được sử dụng để bắt đầu '.exe chỉ. Nếu muốn _run_ các loại tệp khác bạn cần sử dụng ['ShellExecute()'] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153 (v = vs.85) .aspx). – hmjd
@hjmd Mã đó được sử dụng để làm việc trong phiên bản mã trước đó, gọi các tệp .XLS. –