Mutex

dział ogólny

Re: Mutex

Nowy postprzez oneiro » środa, 6 lutego 2013, 12:28

Po prostu nie uruchomi się :lol:

Na razie trzeba dopisać "z ręki" ścieżkę w pliku settings.ini

W sumie w takim przypadku powinno wyskoczyć okienko i operator powinien wskazać katalog zawierający brakujące biblioteki. Tylko tak na szybko nie mam pomysłu, jak sprawdzić, czy plik jest w zmiennej?
Bez problemu mogę przeszukać lokalizacje z pliku settings.ini czy lokalizacje zawierają libeng.dll lub libmx.dll. A co, jeśli lokalizacje z pliku settings.ini są błędne, ale operator ma już w swojej zmiennej PATH poprawną ścieżkę? Nie mam pomysłu, jak to sprawdzić poza próbnym uruchomieniem programu, ale z opóźnionym ładowaniem biblioteki metoda odpada, bo program i tak się odpali, dopiero wywołanie funkcji korzystającej z biblioteki wywali błąd.
Avatar użytkownika
oneiro
Homos antropiczny
Homos antropiczny
 
Posty: 96
Dołączył(a): niedziela, 17 czerwca 2012, 23:19
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder v6
Gadu Gadu: 0
    Windows XPFirefox

Re: Mutex

Nowy postprzez Cyfrowy Baron » środa, 6 lutego 2013, 12:37

oneiro napisał(a):W sumie w takim przypadku powinno wyskoczyć okienko i operator powinien wskazać katalog zawierający brakujące biblioteki.


To już proponowałem.

oneiro napisał(a): ale operator ma już w swojej zmiennej PATH poprawną ścieżkę?


Program na starcie pobiera lokalizację ze zmiennej i sprawdza, czy w tej lokalizacji znajdują się biblioteki.

oneiro napisał(a):Na razie trzeba dopisać "z ręki" ścieżkę w pliku settings.ini


Nie trzeba ręcznie. Po sprawdzeniu czy w lokalizacjach podanych w pliku serrings.ini i w zmiennej PATH znajdują się biblioteki - jeżeli się nie znajdują - program przywołuje okienko wyszukiwania katalogu z informacją dla użytkownika, że ma wskazać lokalizację bibliotek, po czym dodaje tą lokalizację do zmiennej patch.



Moja koncepcja jest taka. Program przy pierwszym uruchomieniu sprawdza zmienną systemową PATH, sprawdza czy w tej lokalizacji znajdują się biblioteki. Jeżeli TAK uruchamia się i działa. Jeżeli NIE przywołuje okno wybierania katalogu i nakazuje użytkownikowi wskazać katalog z bibliotekami, po czym dodaje tą lokalizację do zmiennej środowiskowej.

Przy kolejnych uruchomieniach program sprawdza na starcie tylko zmienną systemową i sprawdza czy w tej lokalizacji znajdują się biblioteki.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Mutex

Nowy postprzez polymorphism » środa, 6 lutego 2013, 12:53

A to nie lepiej po prostu przeszukać rejestr i sprawdzić, czy instalator MathLaba, o ile takowy jest, nie zapisał tam jakichś informacji, z których można by wyciągnąć ścieżki? Jeśli jest deinstalator, to i na 95% ścieżka będzie.

p.s. settings.ini, jeśli będzie zmieniany przez aplikację, nie powinien znajdować się w katalogu z programem. Czasy Windowsa 95 daaawno minęły.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Mutex

Nowy postprzez oneiro » środa, 6 lutego 2013, 13:24

Dzięki za rady

Czyli ja to widzę tak:
1. Pobierz ścieżki ze zmiennej PATH
2. Wyizoluj pojedyncze ścieżki i znajdź w każdej szukanej ścieżce biblioteki
3. Jeśli biblioteki są to "się uruchom"
4. Jeśli nie ma, ze ścieżek z pliku settings.ini wyszukaj biblioteki
5. Jeśli są, dodaj do zmiennej PATH i się uruchom
6. Jeśli nie ma wywołaj okno ze wskazaniem lokalizacji
7. Sprawdź, czy są pliki w podanej lokalizacji
8. Jeśli są - uruchom, jak nie, powtórz 7. lub się zamknij

Oczywiście mogę to ulepszyć z rejestrem, ale po wyszukania w rejestrze ciągu "libeng.dll" oraz "libmx.dll" nic konkretnego nie wskazało (poza HKEY_USERS\S-1-5-21-602162358-789336058-854245398-1003\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU\dll ale to nie jest nic związane z Matlabem)

PS. Wiem, ale wyznaję filozofię *unixową czyli zawsze można coś poprawić/zmienić mając do dyspozycji tylko edytor tekstu :) Poza tym mój program ma dokonać optymalizacji na podstawie zadanych danych i każdy krok obliczeń chcę mieć w oddzielnym pliku, a plik settings.ini od pliku wyników nie będzie wiele się różnić (nie będzie np. ścieżek zapisywał, ale za to całą masę innych parametrów, które później będę musiał poddać analizie - takie format wydaje mi się jak najbardziej pożądany)
Avatar użytkownika
oneiro
Homos antropiczny
Homos antropiczny
 
Posty: 96
Dołączył(a): niedziela, 17 czerwca 2012, 23:19
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder v6
Gadu Gadu: 0
    Windows XPFirefox

Re: Mutex

Nowy postprzez Cyfrowy Baron » środa, 6 lutego 2013, 13:47

oneiro napisał(a):Oczywiście mogę to ulepszyć z rejestrem, ale po wyszukania w rejestrze ciągu "libeng.dll" oraz "libmx.dll" nic konkretnego nie wskazało


To lista MRU na niewiele się zda. Chodzi o katalog MatLab, skoro jest deinstalator to w rejestrze musi być zapisana lokalizacja tego katalogu. Wpisz w wyszukiwarkę rejestru ścieżkę dostępu do katalogu MatLab, którą masz u siebie. Klucz który znajdziesz będzie zawsze się tak nazywał i masz problem rozwiązany. Wystarczy, że program na starcie sprawdzi rejestr, sprawdzi ścieżkę, a potem sprawdzi czy zmienna systemowa zawiera tą ścieżkę.

polymorphism napisał(a):settings.ini, jeśli będzie zmieniany przez aplikację, nie powinien znajdować się w katalogu z programem.


Dlaczego nie powinien? W czym to przeszkadza. Z tego co zauważyłem to wiele programów przechowuje pliki konfiguracyjne w katalogu programu, chociaż nie zawsze są to pliki INI, coraz częściej to pliki XML.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Mutex

Nowy postprzez polymorphism » środa, 6 lutego 2013, 13:56

czywiście mogę to ulepszyć z rejestrem, ale po wyszukania w rejestrze ciągu "libeng.dll" oraz "libmx.dll" nic konkretnego nie wskazało

Ty nie szukaj w rejestrze DLL-ek, tylko poszukaj jakichś informacji MathLaba, konkretnie ścieżek do niego.

Na przykład w tych lokalizacjach:

HKEY_CURRENT_USER\Software\...
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\...



HKEY_LOCAL_MACHINE\SOFTWARE\...
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\...



Wiem, ale wyznaję filozofię *unixową czyli zawsze można coś poprawić/zmienić mając do dyspozycji tylko edytor tekstu

Nie o to mi chodzi. Wszelkie pliki, które podlegają edycji podczas pracy programu, nie powinny znajdować się w katalogu z programem. Przyczyna jest prosta - użytkownik na koncie ograniczonym nie będzie miał do tego folderu dostępu, jeśli program będzie rezydował w Program Files. Jeśli dobrze pamiętam, na platformach uniksopodobnych też jest to podobnie zorganizowane. Wynika to z zasad bezpieczeństwa, zatem nie warto tu kombinować.

To są lokalizacje, w których powinny znaleźć się pliki konfiguracyjne:

ustawienia użytkownika: %APPDATA%\<folder programu>\settings.ini
ustawienia dla wszystkich: %ALLUSERSPROFILE%\<folder programu>\settings.ini



Cyfrowy Baron napisał(a): Z tego co zauważyłem to wiele programów przechowuje pliki konfiguracyjne w katalogu programu (...)

I prawdopodobnie pliki te są tylko do odczytu...
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Mutex

Nowy postprzez oneiro » środa, 6 lutego 2013, 22:25

Dzięki za rady, na razie nie mam instalatora, ale chyba z zapisem settings.ini nie powinno być problemu. Skoro user z ograniczonymi prawami w domenie windows może zapisać wysłany plik zip i go uruchomić (nie wiem gdzie go zapisują, czy w Document and Settings czy też na jakimś innym dysku), to nie powinno chyba być problemów z ewentualnym zapisem zmian w pliku settings.ini.
Ale może się mylę.

PS. Znalazłem ścieżkę w rejestrze: HKEY_LOCAL_MACHINE\SOFTWARE\MathWorks\MATLAB\7.13 (jest to wersja 2011B, są też klucz 7.11 czyli 2010b), a wewnątrz jest pozycja ciągu MATLABROOT ze ścieżką, z którą wiem co dalej zrobić :) Teraz tylko nauczyć się obsługi rejestru i część uruchomieniowa programu gotowa :D
Avatar użytkownika
oneiro
Homos antropiczny
Homos antropiczny
 
Posty: 96
Dołączył(a): niedziela, 17 czerwca 2012, 23:19
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder v6
Gadu Gadu: 0
    Windows XPFirefox

Poprzednia strona

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 5 gości