![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Доброго времени суток!
Написал следующий код для запуска Java-программы (.jar), но он почему-то не хочет отрабатывать: Код:
JavaMachineExe := '<полный путь к java.exe>'; Params := '-Xmx1024M -Xms1024M -jar minecraft_server.jar nogui'; WorkFolder := 'M:\'; ShellExecute(0, 'open', PChar(JavaMachineEXE), PChar(Params), PChar(WorkFolder), SW_SHOWNORMAL); Файл minecraft_server.jar лежит в папке <WorkFolder>. Что я неправильно делаю? Почему не запускается .jar файл? Заранее спасибо. |
|
#2
|
|||
|
|||
|
А что возвращает функция ShellExecute?
|
|
#3
|
||||
|
||||
|
Цитата:
И какую версию Delphi используешь? Delphi 7 или Delphi XE. Если второе, то возможно у тебя путаница между Ansi и Wide. Попробуй так: Код:
var JavaMachineExe, Params, WorkFolder: AnsiString; begin JavaMachineExe := '<полный путь к java.exe>'; Params := '-Xmx1024M -Xms1024M -jar minecraft_server.jar nogui'; WorkFolder := 'M:\'; ShellExecuteA(0, 'open', Pointer(JavaMachineEXE), Pointer(Params), Pointer(WorkFolder), SW_SHOWNORMAL); end; Код:
var JavaMachineExe, Params, WorkFolder: WideString; begin JavaMachineExe := '<полный путь к java.exe>'; Params := '-Xmx1024M -Xms1024M -jar minecraft_server.jar nogui'; WorkFolder := 'M:\'; ShellExecuteW(0, 'open', Pointer(JavaMachineEXE), Pointer(Params), Pointer(WorkFolder), SW_SHOWNORMAL); end; Код:
var
SI: TStartupInfo;
PI: TProcessInformation;
JavaMachineExe, Params, WorkFolder: AnsiString;
begin
FillChar(SI, SizeOf(SI), 0);
SI.cb := SizeOf(SI);
SI.wShowWindow := SW_SHOWNORMAL;
SI.dwFlags := STARTF_USESHOWWINDOW;
JavaMachineExe := '<полный путь к java.exe>';
Params := AnsiQuotedStr(JavaMachineExe, '"') + ' -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui';
WorkFolder := 'M:\';
if not CreateProcessA(nil, Pointer(Params), nil, nil, False, NORMAL_PRIORITY_CLASS,
nil, Pointer(WorkFolder), SI, PI) then RaiseLastOSError;
try
WaitForInputIdle(PI.hProcess, INFINITE);
//...
finally
CloseHandle(PI.hProcess);
CloseHandle(PI.hThread);
end;
end; |
|
#4
|
||||
|
||||
|
Цитата:
Цитата:
|
|
#5
|
||||
|
||||
|
Цитата:
Большое спасибо, данный код работает (другие не проверял). |