Problem z wywołaniem pliku

0

Jak w temacie...

Prowadzę serwer i wpadłem na pomysł zrobienia aplikacji w delphi,która będzie mi restartowała serwer..
Wszystko jest pięknie ładnie,aplikacja napisana a tu lipa :(

Wywołuje plik batch:

uses
  ShellAPI
 
ShellExecute(Handle, 'open', 'Start.Bat', nil, 'D:\Serwer\', SW_SHOWNORMAL);

i w pliku batch wyskakuje mi taka informacja....

invalid maximum heap size: -Xmx7168m
Could not create the java virtual machine.

mam problem tylko gdy uruchamiam ten plik Batch z poziomu delphi...

bo normalnie plik Start.bat się odpala i śmiga...

Java -Xmx7168m -Xms3584m -jar

...może znacie przyczynę...

...pozdrawiam

0

jak na mój biust wygląda dobrze, przynajmniej ta część w delphi.
daj za tym

showmessage( InttoStr( GetLastError ));

może coś podpowie

0

Pokazuje mi 0

nawet tym sposobem nie działa:

WinExec('D:\Serwer\Start.bat', SW_SHOW);
0

...może znacie przyczynę...

Nie dysponujemy magiczną kulą.

Skoro swój problem opisałeś jak opisałeś, pozostawiasz nam jedynie możliwość zgadywania co jest nie tak. Ja zgaduję że coś jest nie tak. I zapewne to coś to nie jest to co już podałeś.

Jak dla mnie to możesz wrócić gdy już będziesz potrafił podać więcej informacji, bo póki co to łaską jest jedna linia batcha i jedna programu.

2

WinExec('c:\windows\cmd.exe /C D:\Serwer\Start.bat', SW_SHOW);

0

ale batch jest dobrze napisany,tylko jak go wywołuje przez delphi to nie działa...

Start.Bat
Java -Xmx7168m -Xms3584m -jar "D:\Serwer\minecraft.jar"
jak wywołuje program plikiem wsadowym komendą call to działa,a jak użyję ShellExecute to nie działa..
kodu nie ma dużo....tylko linijka w delphi i linijka pliku wsadowego.....

WinExec('c:\windows\System32\cmd.exe /C D:\Serwer\Start.bat', SW_SHOW);

Lipa :( otwiera wszystkie pliki bat poza tym co ma dopisane

Java -Xmx7168m -Xms3584m -jar "D:\Serwer\minecraft.jar"
0

ale batch jest dobrze napisany,tylko jak go wywołuje przez delphi to nie działa...

Skoro lepiej wiesz co jest przyczyną problemu to po co w ogóle pytasz na forum?

kodu nie ma dużo....tylko linijka w delphi i linijka pliku wsadowego.....

Po prostu za trudno dać więcej kodu. Tyle mi wystarczy, pytacz nie umie zadać poprawnie pytania. Temat też śmieszny ale już administracje nic nie obchodzi idiotyzm tematu. Ja już nie będę usiłować pomagać bo widzę że pytacz ma gdzieś to co się do niego mówi.

0

jasne śmieszny temat .....
jakoś nikt nie potrafi rozwiązać problemu.....

oto kod..

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, ShellAPI;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Timer1: TTimer;
    Image1: TImage;
    Image2: TImage;

    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  i:integer;     


implementation

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
begin
 i:=5;
  timer1.Enabled := true;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key = VK_RETURN then form1.Close;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Label1.Caption:=inttostr(i);
  i:=i-1;
  if i<0 then timer1.Enabled := false;

  if timer1.Enabled = false then
  ShellExecute(Handle, 'open', 'D:\Serwer\Start.bat', nil, nil, SW_SHOWNORMAL);


 end;
end.

Start.Bat

Java -Xmx7168m -Xms3584m -jar "D:\Serwer\minecraft.jar"

proszę bardzo....

0

Może wyjaśnij mi czym u ciebie jest D:\Serwer\Start.bat

  • z tego ShellExecute(Handle, 'open', 'D:\Serwer\Start.bat', nil, nil, SW_SHOWNORMAL); wynika że plikiem wsadowym
  • z tego Java -Xmx7168m -Xms3584m -jar "D:\Serwer\Start.bat\minecraft.jar" wynika że jest folderem
0

Może wyjaśnij mi czym u ciebie jest D:\Serwer\Start.bat

  • z tego ShellExecute(Handle, 'open', 'D:\Serwer\Start.bat', nil, nil, SW_SHOWNORMAL); wynika że plikiem wsadowym
  • z tego Java -Xmx7168m -Xms3584m -jar "D:\Serwer\minecraft.jar" wynika że jest folderem
    "

Plik wsadowy Start.bat uruchamia mój serwer minecraft.jar na dysku D.....
Jest jeden folder SERWER a w nim są te 2 pliki Start.bat i minecraft.jar

ja tylko nie rozumiem dlaczego gdy odpalę aplikację w delphi
mogę otworzyć wszystkie pliki bat....a z tym Start.bat jest problem.

0

a jak nie uzywasz timera tylko odpalasz spod przyciska to sa zmiany?
A moze odpal aplikację z prawami admina?

0

a jak nie uzywasz timera tylko odpalasz spod przyciska to sa zmiany?
A moze odpal aplikację z prawami admina?

dalej jest tak samo...........wywaliłem timer i zastąpiłem go przyciskiem.....
prawa admina tez nic nie dały...

Problem polega na tym,żę za pomocą pliku exe...nie da się uruchomić pliku bat z linijką java -x cośtam cośtam
a plikiem wsadowym otwiera normalnie.....

nawet plik Start.bat po przekonwertowaniu na exe nie działa.... :(

0

To moze nie odpalaj pliku bat tylko znajdz sobie kod na wywolywanie polecen z konsoli z poziomu delphi

0

Skoro cmd.exe potrafi poprawnie uruchomić ten plik a program nie, to wykorzystaj do tego cmd.exe i uruchom go z parametrem, coś na ten kształt:

ShellExecute(Handle, 'open', 'cmd.exe', 'D:\Serwer\Start.bat', nil, SW_SHOWNORMAL);

Mogłem się dupnąć gdzieś w ścieżce pliku wsadowego, ale spróbuj w ten sposób.
Faktycznie pomyliłem się - wystarczy żeby cmd.exe uruchomił ten plik - sprawdź czy w ten sposób zadziała;

W sumie to już Dragon proponował podobne rozwiązanie... W każdym razie sprawdź to.

0

To moze nie odpalaj pliku bat tylko znajdz sobie kod na wywolywanie polecen z konsoli z poziomu delphi

Moja aplikacja ma to zrobić automatycznie,dlatego potrzebuje odpalać z pliku...

ShellExecute(Handle, 'open', 'cmd.exe', 'D:\Serwer\Start.bat', nil, SW_SHOWNORMAL); 

tylko odpala się cmd......nie otwiera pliku z podanej ściezki..

0

Pamiętam, że kiedyś brałem udział w wątku, w którym poruszany był dokładnie ten sam problem - program miał uruchomić cmd z parametrem, ale nijak to nie chciało działać; Szukałem tego wątku, ale niestety nie znalazłem; Przewaliłem swoje wszystkie posty i wątek gdzieś przepadł, ale nie pamiętam czy ja sam o to pytałem, czy ktoś inny, a ja tylko podpowiadałem;

W każdym razie na to wychodzi, że cmd.exe nie pozwala uruchomić się z parametrem (testowane na WinXP) - tnz. uruchomi się, ale nie weźmie pod uwagę dodatkowych parametrów i nic więcej nie zrobi;

Sprawdziłem u siebie i z polecenia Uruchom wpisuję:

cmd.exe "C:\Windows\System32\notepad.exe"
i otwiera się jedynie okno konsoli; Ale jeśli otworzę sobie wiersz poleceń i wpiszę:

C:\Windows\System32\notepad.exe
to notatnik się otwiera bez problemu; Dlatego też sądzę, że nie można w tak prosty sposób zmusić cmd do automatycznego otworzenia jakiegokolwiek pliku czy wykonania jakiegokolwiek polecenia (np. DIR); Może z TDosCommand uda się to zrobić lub za pomocą innych podobnych klas, ale nie wiem tego;

Sprawdźcie jak możecie na systemach nowszych niż WinXP czy da się uruchomić cmd z parametrem - na pewno w tym tkwi problem;</del>


EDIT: W takim razie do parametru konsoli trzeba dopisać c/ i będzie wszystko działać - otworzy się i konsola i skrypt:

ShellExecute(Handle, 'open', 'cmd', '/c "D:\Serwer\Start.bat"', nil, SW_SHOWNORMAL);

Dokładnie to samo rozwiązanie podał wcześniej @_13th_Dragon, tyle że za pomocą WinExec.

0

wyskakuje mi komunikat:
System nie może odnaleźć określonej ścieżki..
Przez cmd otwierałem notepad.exe i inne pliki bat,i się w oknie uruchamiały....uruchamiają się wszystkie pliki ...ale oprócz start.Bat

Nawet jak utworzę plik Uruchom.Bat :

 cd "D:\Serwer"
call "Start.Bat"

i go uruchomię z poziomu mojej aplikacji to też nie uruchamia się plik Start.Bat....

niestety cmd nie radzi sobie z tym plikiem odpalonym przez moją aplikację...
bo jak normalnie uruchomię cmd i wpiszę cd D:\Serwer\Start.bat to odpala..............a przez moją aplikację uruchomię cmd i nie da się uruchomić Start.Bat.....a moja aplikacja jest dobrze napisana bo otwiera 99% plików bat oprócz tego jednego.....

z tym kodem też nie działa:

 @echo off
SET BINDIR=%~dp0
CD /D "%BINDIR%"
"%ProgramFiles%\Java\jre7\bin\java.exe" -jar minecraft.jar

wyskakuje mi komunikat:
System nie może odnaleźć określonej ścieżki..

Tutaj jest Link do filmiku, i mój programik jest zrobiony w pliku BATCH

chciałem zrobić ten sam programik w DELPHI i widzę ,że nie da rady.....

0

cmd sobie nie radzi z tym
Java -Xmx7168m -Xms3584m -jar
jak wpisuje ręcznie w cmd cd D:\Serwer\Start.Bat to działa,ale z poziomu aplikacji wyskakuje,że system nie może odnaleźć określonej ścieżki..

0

A to:

ShellExecute(Handle, nil, 'cmd.exe', '/c D:\Serwer\Start.bat', 'D:\Serwer\', SW_SHOWNORMAL);
0

nie działa.....

0

nie działa.....

Nie ma czegoś takiego jak "nie działa" - jest przyczyna, jest skutek; Nie uruchamia się, nie spełnia oczekiwań to podajesz co wykorzystałeś i jaki był tego skutek - program zawiesił się, nie uruchomił czegoś, wywalił wyjątek itd.; Jak chcesz otrzymać pomoc to podawaj jak najwięcej informacji o zastosowanych poradach;


Napisz, czy po odpaleniu Java -Xmx7168m -Xms3584m -jar z dowolnej ścieżki zawsze uruchamia się ten serwer czy co tam uruchamiasz; Tylko wpisz to bezpośrednio w cmd w różnych miejscach na dysku; Może ścieżka aktualnego katalogu mu nie odpowiada.

0
 Invalid maximum heap size: -Xmx7168m
could not create the java virtual machine

a jak zejdę poniżej 3GB to mi wywala:

 Error occurred during initialization of VM
Could not reserve enough space for object head

A jak odpalam plik wsadowy to nie ma takich problemów....

0

Też próbowałem otworzyć moją aplikacją plik batch,który otwierał następny plik batch Start.Bat... i też wyskakuje ten sam komunikat co wyżej...

0

To, że się uruchamia z pod batcha nie powinno mieć wpływu na docelowy program jeżeli parametry są takie same. Jeżeli natomiast wywołujesz batch w batchu, to raczej ja bym zrobił to poprzez call. A co będzie jeżeli uruchomisz tego batcha z parametrami takim kodem, jak poniżej (drugi parametr jest taki jak przy funkcji ShowWindow)? Bo może kwestia to też ustawienie aktywnego katalogu poprzez SetCurrentDirectory. Wedle mnie do uruchamiania typowych plików, jak *.com, *.exe czy *.bat albo exeków ze zmienionym rozszerzniem powinno się używać odpowiednich do tego funkcji. Czyli raczej CreateProcess. A ShellExecute wedle mnie powinniśmy używać do wykonania polecen jak otwarcie protokołów dodanych do Rejestru jak na przykład http:// albo skojarzonych plików czy pokazania okien folderów pod Exploratorem. Jeżeli natomiast chcesz uruchamiać konkratnie tylko batcha i mieć kontrolę nad zwracanym rezultatem lub wysyłać później teksty do niego to użyj komponentu TDosCommand.

function ExecNewProcess(ProgramName : string; CmdShow : LongWord) : DWORD;
var
  SI : TStartupInfo;
  PI : TProcessInformation;
begin
  ZeroMemory(@SI, SizeOf(SI));
  SI.cb := SizeOf(SI);
  SI.dwFlags := STARTF_USESHOWWINDOW;
  SI.wShowWindow := CmdShow;
  CreateProcess(nil, PChar(ProgramName), nil, nil, False, 0, nil, nil, SI, PI);
  Result := PI.dwProcessId
end;
0

Błąd:
Access violation at address 7664B783 in module 'Kernel32.dll'. Write of address 005A84A6.

0

Naprawiłem problem :)
shit te całe zamieszanie było w JAVIE.............Odinstalowałem Jave i zainstalowałem jeszcze raz... i poszło....
zrobiłem tak jak na filmiku:

0
Pawcio1984 napisał(a):

Błąd:
Access violation at address 7664B783 in module 'Kernel32.dll'. Write of address 005A84A6.

Nie wiem skąd taki błąd. Podanej wyżej funkcji używałem nie raz w swoim kodzie. I działa ona bez zarzutów pod różnymi Windowsami. To czyste WinAPI, więc jeżeli system nie jest skopany to po prostu musi działać. Ale widzę, że już problem rozwiązany. Od razu można było obstawić, że coś nie tak z javą na Twoim komputerze. Bo niemal wszystkie przykłady kodu, jakie otrzymałeś w tym wątku były dobre i powinny sprawnie działać. Pomijając zawartośc batcha, bo sam do końca nie wiedziałeś co tam "modzisz". Chyba logiczne, że bez podanie pełnej ściezki do pliku musi on być w %PATH% - tutaj "kłaniają" się banalne podstawy obsługi systemów jeszcze z czasów DOS'a.

1 użytkowników online, w tym zalogowanych: 0, gości: 1