以下のコードでは文書を開けません。エラー193が発生します(%1は有効なWin32アプリケーションではありません)。実行ファイルを起動すると正常に動作します。 ファイルは適切に関連付けられており、ダブルクリックすると対応するアプリが起動します。 私は、コマンドラインを引用について知っているエラーメッセージ、のCreateProcessものなど(例:Why is CreateProcess failing in Windows Server 2003 64-bit? 用SOおよび他の場所で検索しました。CreateProcessでエラー193が発生するのはなぜですか(%1は有効なWin32アプリケーションではありません)
これはデルファイXE2(Win7の64ビット版での更新4)のWin32アプリVMWareのVM。
コードは、ホストマシン上で失敗し(Win7の64ビット)および32ビットのXPで仮想PC VMインチ
Win7のVM(エクセル2003とクリムゾンで開始する必要がありますアプリをエディタ)は32ビットです
障害が発生し、両方のIDEから起動するときや、テストアプリは
それは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
私はDelphiに慣れていませんが、WINAPIの 'CreateProcess()'を使って '.exe'のみを起動することができます。他の種類のファイルを_run_したい場合は、['ShellExecute()'](http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx)を使用する必要があります。 )。 – hmjd
@hjmdそのコードは以前のコードバージョンで動作し、.XLSファイルを呼び出していました。 –