|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Проблема с ShellExecute
Доброго времени суток!
Написал следующий код для запуска 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 файл? Заранее спасибо. Работа пpогpаммиста и шамана имеет очень много общего: оба боpмочyт непонятные слова, совеpшают непонятные действия и не могyт объяснить, как оно pаботает. |
#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
|
||||
|
||||
Цитата:
Цитата:
Работа пpогpаммиста и шамана имеет очень много общего: оба боpмочyт непонятные слова, совеpшают непонятные действия и не могyт объяснить, как оно pаботает. |
#5
|
||||
|
||||
Цитата:
Большое спасибо, данный код работает (другие не проверял). Работа пpогpаммиста и шамана имеет очень много общего: оба боpмочyт непонятные слова, совеpшают непонятные действия и не могyт объяснить, как оно pаботает. |