Esco pisze:Kod: Zaznacz cały
#import "shell32.dll"
int ShellExecuteA(int hWnd,int lpVerb,string lpFile,int lpParameters,int lpDirectory,int nCmdShow);
#import
Kod: Zaznacz cały
ShellExecuteA(0,0,"path+"\experts\files\ftp.jar"",0,0,5);
Spróbuj powyższego kodu. Wywołanie odpowiada dokładnie podwójnemu kliknięciu.
Jeszcze o ostatnią poradę bym prosił. Teraz jak wiem że plik już działa zrobiłem pierwotną wersję z parametrem, której nie mogę uruchomić.
Przeczytałem w dokumentacji że ShellExecuteA zwraca Int z błędem więc użyłem takiego kodu:
string b=ShellExecuteA(0,0,path+"\experts\files\ftp.jar "+path+"\experts\files",1,0,5); - w tym przypadku zwraca 0 czyli outofmemory - ale co to oznacza ?
string b=ShellExecuteA(0,0,path+"\experts\files\ftp.jar "+path+"\experts\files",0,0,5); - zwraca błąd 2 czyli wrong file name
string b=ShellExecuteA(0,0,path+"\experts\files\ftp.jar",path+"\experts\files",0,5); - w tym wypadku błąd numer 42 - kompletnie nie wiem co to oznacza
Byłbym bardzo wdzięczny za pomoc.
*UPDATE*
Rozszyfrowałem. Błąd numer 42 oznacza brak błędu. Plik zapisał się ale kompletnie nie tam gdzie trzeba. Teraz muszę znaleźć błąd.
Ta konstrukcja jest poprawna:
Kod: Zaznacz cały
string b=ShellExecuteA(0,0,path+"\experts\files\ftp.jar",path+"\experts\files",0,5);
Błędnie w pierwszym poście pokazywałeś Esco użycie z parametrem.
Kod: Zaznacz cały
Kod:
ShellExecute(NULL, "open", "javaw.exe sciezka/program.jar komenda1 komenda2',[b] NULL[/b], NULL, SW_SHOW) )
- tak jest błędnie
int lpParameters jest odpowiedzialne za przekazanie parametru i tam nie można wstawić wtedy 0. 0 oznacza brak parametru.
Dziękuję mimo wszystko za poświęcony czas. Wspólnymi siłami udało mi się uruchomić co trzeba.
Dodano po 1 godzinach 8 minutach:
Znalazłem błąd. Tak na przyszłośc jakby ktoś przekazywał ścieżkę dostępu w Javie a w Mql.
TerminalPath() zwraca ścieżkę w formacie
C:\ProgramFiles\Terminal
podając taki adres w funkcji dostępu do pliku Jar jest wszystko ok.
I teraz: jak podajemy ścieżkę do pliku w Javie ( jako parametr ) trzeba ją już podać w następującym formacie:
C:
//ProgramFiles/Terminal
Tak więc jeśli nie zmienię ścieżki dostępu z "/" na "//" plik zapisuje mi na dysku C z przedrostkiem ProgramFiles w nazwie pliku. Drobny błąd a musiałem poświęcić mnóstwo czasu na znalezienie go.
Dodano po 1 godzinach 47 minutach:
Problem finalnie naprawiony. Kolejne dwie godziny poświęciłem ale plik zgrywa już z parametrem tam gdzie trzeba.
Problem leżał jednak jeszcze gdzie indziej a mianowicie w lokalizacji.
Platformę mam zainstalowaną w folderze Program(spacja)Files(spacja)(x86)
TerminalPath() zwracał do Stringa te wartość a następnie przekazywał jako parametr do pliku Jar. Mimo że przekazywał go w jednym stringu to sam program java odbierał go już jako 3 parametry. Przez spacje w nazwie.
Dopiero taki zabiegł pomógł i właściwie czyta parametr:
Kod: Zaznacz cały
public static void main(String[] args) throws Exception{
int length=args.length;
String path = "";
for(int a=0;a<length;a++){
path=path+args[a]+" ";
}
(...)
}