Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Socol
0 / 0 / 1
Регистрация: 17.11.2012
Сообщений: 9
#1

CreateProcess и java - Delphi

09.06.2013, 09:34. Просмотров 795. Ответов 4
Метки нет (Все метки)

возникла проблема с запуском джавы. через бат файл запускается.
C++
1
start javaw -Xmx512m -Djava.library.path=%APPDATA%/.minecraft/bin/natives -cp %APPDATA%/.minecraft/bin/minecraft.jar;%APPDATA%/.minecraft/bin/jinput.jar;%APPDATA%/.minecraft/bin/lwjgl.jar;%APPDATA%/.minecraft/bin/lwjgl_util.jar net.minecraft.client.Minecraft Username
а вот через деньфи не как.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
procedure TForm1.Button1Click(Sender: TObject);
var
SI: TStartupInfo;
PI: TProcessInformation;
JavaMachineExe, Params, WorkFolder: AnsiString;
login, pass: string;
begin
login := edit1.Text;
pass := edit2.Text;
FillChar(SI, SizeOf(SI), 0);
SI.cb := SizeOf(SI);
SI.wShowWindow := SW_SHOWNORMAL;
SI.dwFlags := STARTF_USESHOWWINDOW;
 
JavaMachineExe := 'C:\Program Files\Java\jre7\bin\javaw.exe';
Params := AnsiQuotedStr(JavaMachineExe, '"') + '-Xmx1024M -Xms1024M -Djava.Library.path='+minecraft+'natives -cp '+minecraft+ 'minecraft.jar;'+ minecraft+ 'jinput.jar;'+minecraft+'Lwjgl.jar;'+minecraft+'Lwjgl_util.jar nrt.minecraft.client.minecraft '+ login+ ' '+ pass+'"';
WorkFolder := minecraft;
 
if not CreateProcess(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;
 
procedure TForm1.FormShow(Sender: TObject);
var
userName : String;
userNameLen : dword;
nameclear, install : String;
begin
userNameLen := 255;
SetLength(userName, UserNameLen);
if GetUserName(PChar(UserName), UserNameLen) then
 nameclear:= Copy(UserName,1,UserNameLen -1)
else begin
 nameclear:= 'error';
end;
minecraft:= ('C:\Users\'+ nameclear +'\AppData\Roaming\.minecraft\bin\');
end;
на мой взгляд, так все правильно. но джава думает иначе. подскажите в чем я ошибся.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2013, 09:34
Я подобрал для вас темы с готовыми решениями и ответами на вопрос CreateProcess и java (Delphi):

CreateProcess
Дайте пожалуйста код для открытия файла с помощью CreateProcess. Файл...

CreateProcess Delphi
Здравствуйте, недавно столкнулся с одной проблемой. Пытаюсь запустить процесс...

CreateProcess - не дожидается окончания
Здравствуйте, подскажите в чем проблема, я написал чтобы после завершения...

Запуск через CreateProcess
Как запустить программу через CreateProcess и передать параметры запуска ?...

CreateProcess не запускает программу
Прочитал умную статью, что мол надо использовать исключительно CP для запуска...

CreateProcess, нажатие клавиши
Как передать дочерней программе нажатую клавишу. П.с. дочерняя программа,...

4
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25622 / 17175 / 6830
Регистрация: 22.10.2011
Сообщений: 30,369
Записей в блоге: 6
09.06.2013, 13:28 #2
Цитата Сообщение от Socol Посмотреть сообщение
на мой взгляд, так все правильно
Даже никому не нужная кавычка в самом конце строки? Попробуй посмотреть, что у тебя получается в строке Params, выведи ее куда-нибудь, перед тем, как отправлять в функцию.

О том, какие еще проблемы часто возникают при использовании CreateProcess - см. здесь: Этот проблемный CreateProcess...
0
Dr_Quake
Заблокирован
09.06.2013, 14:52 #3
В Params НЕ пишут имя exe самого. Зайди в форум Delphi WinAPI. А вообще для новичков есть winexec простейший - с ним легче.
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25622 / 17175 / 6830
Регистрация: 22.10.2011
Сообщений: 30,369
Записей в блоге: 6
09.06.2013, 15:13 #4
Цитата Сообщение от Dr_Quake Посмотреть сообщение
В Params НЕ пишут имя exe самого.
Еще один... Ты по ссылке-то ходил, или "и так всё знаешь"? Значит, плохо знаешь, иди и читай.

Цитата Сообщение от Dr_Quake Посмотреть сообщение
А вообще для новичков есть winexec простейший
WinExec, который уже много лет, как deprecated:
This function is provided only for compatibility with 16-bit Windows.
, и всё никак не подохнет? Ясно всё с тобой...
0
Dr_Quake
Заблокирован
09.06.2013, 15:20 #5
Знаю и использовал его так постоянно.

Да, deprecated, уже лет 10 как, всё никак не подохнет, самый простой способ. В данном раскладе CreateProcess нафиг не нужен тоже by design, тогда уж ShellExecute как положено.
0
09.06.2013, 15:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2013, 15:20
Привет! Вот еще темы с решениями:

Ошибка при CreateProcess
Требуется осуществить перехват вывода консоли в Memo. Нашел тройку процедур в...

Вырубание дочернего процесса CreateProcess
И так я запускаю программу через CreateProcess и дальше программа следит за...

Как скрыть окно createprocess
вопрос заключается непосредственно в название темы пробовал так: var SI:...

Пробелы в имени файла (CreateProcess)
Здравствуйте. Нужно запаковать файл в архив и по завершению архивирования...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru