Statyczna biblioteka mysql.data w .NET || Blokada ubicia procesu

0

Witajcie.

Napisałem sobie program w Visual Basic 2012 opartym na C++ oraz .NET.
Pomyślałem, że przydałoby się połączenie MySQL, więc dodałem odpowiednie biblioteki z MySql Net/Connector i wsio. Dosyć dużo już napisałem no i wysyłam koledze aplikację, by sprawdził czy wszystko działa. No i zonk. Nie ma MySql.Data.dll. Oczywiście po wysłaniu owej dll wszystko śmiga. Zacząłem szukać sposobu na "połączenie" tych plików. Znalazłem wiele programów, np. LibZ, NetZ itd. ale oczywiście żaden nie działał, bo zawsze był jakiś błąd, którego rozwiązania nie było w internecie. No to pomyślałem, że może gdzieś jest statyczna biblioteka. No i znowu zonk, bo do Net/Connectora nie dołączane są statyczne biblioteki, jedynie dynamiczne.

No i teraz przychodzę do Was z pomocą. Próbowałem podpiąć C++/Connector, ale oczywiście znowu błędy i musiałbym wieeele kodu przerabiać pod ten z connector C++. Mam do Was pytanie: czy to możliwe i jeżeli tak, to jak statycznie dodać w/w MySql.Data do projektu? Naprawdę zależy mi na tym, by obok programu nie leżały jakieś dodatkowe pliki.

Z góry wielkie dzięki za pomoc,
czekam oraz pozdrawiam :)

1

Hmm.. czy wyobrażasz sobie takiego Photoshopa w jednym pliku exe który ma 1.3GB? ;) Właśnie po to są biblioteki. Co do problemu, możesz spróbować zapakować dllkę na zasobów i wyciągać z nich na żądanie.

0

Nie no, ja dokładnie rozumiem, ale to tylko jedna .dll. Dla mnie to pikuś, ale osoby które będą z tego korzystać na pewno będą narzekać, że muszą aż tyle plików kopiować (czasem tych ludzi nie rozumiem).

Kontynuując. Jak to "wyciągnąć" z zasobów na życzenie?? Dopiero od paru dni pracuję na Visual Basic 2012 i muszę sie jeszcze wieele nauczyć.

Z góry wielkie dzięki za wytłumaczenie.

Pozdrawiam :)

0

Witajcie ponownie.

Nadal nie znam rozwiązania ze statyczną biblioteką, ale odstawiam to na potem, ponieważ mój projekt nie może być ukończony bez najważniejszego: blokady zabicia procesu.

Przejrzałem już cały internet w poszukiwaniu dobrego sposobu. Do rootkitów nie będę sięgać.

Teraz o co mi dokładnie chodzi i dlaczego jest to tak ważne. Moja aplikacja po uruchomieniu dokonuje pewnych modyfikacji w folderze, w którym się znajduje (zwykła zmiana nazwy, przeniesienie pliku). Kiedy normalnie zamykam program, to cofam wszystkie zmiany, które dokonałem. Problem pojawia się, gdy mój proces zostanie ubity z menedżera zadań. Kombinowałem na różne sposoby: ukrycie procesu, różne "kody" na blokowanie zabijania i... NIC. Pomyślałem zrobić usługę, która będzie "czuwać" nad moim programem i kiedy zobaczy, że ktoś go ubił, to wtedy cofa zmiany sama i się wyłączy/odinstaluje. Znalazłem takie coś: http://code.msdn.microsoft.com/windowsapps/CppWindowsService-cacf4948

Wrzuciłem do mojego projektu, przerobiłem Unicode na ASCII, stworzyłem usługę i tyle. Na razie usługa "niby jest" ale nic nie robi. Teraz mam pytanie do Was, jak dojść do tego, co wymyśliłem? Ewentualnie jakoś naprowadzić mnie na sposób, w który mógłbym cofnąc te zmiany przy ubiciu procesu. Dodam, że nie chcę robić 2 oddzielnych aplikacji, które by na sobie polegały. Gdy ktoś ubije jedną, to ta druga odpala ją z powrotem i viceversa.

Pozdrawiam i czekam na odpowiedzi.

0
misiakufal napisał(a):

Hmm.. czy wyobrażasz sobie takiego Photoshopa w jednym pliku exe który ma 1.3GB? ;) Właśnie po to są biblioteki.

wtf? Biblioteki nie są po to żeby program nie miał jednego dużego pliku

bilbioteki są po to żeby można było jeden kod wykorzystać w wielu programach (jednocześnie zmniejszając zapotrzebowanie na pamięć w komputerze w przypadku naprawdę często używanych bibliotek)
też po to żeby zmiana w jednym module nie wymuszała rekompilacji całego programu i żeby w razie potrzeby aktualizacji podmienić tylko jeden plik

Nie ma żadnego problemu w tym żeby exec zajmował 1GB; pewnie nawet byłyby takie programy ale sam kod programu aż tyle nie zajmuje
Zazwyczaj tyle zajmują dodatkowe zasoby które i tak trzeba by było wypakować z resourców więc w ramach zwiększenia wydajności są one od razu obok

Ale widywałem już execi po kilkaset MB, photoshop ma akurat głównego execa o wielkości 50 MB co też nie jest małym pliczkiem

0
Michalec napisał(a):

Moja aplikacja po uruchomieniu dokonuje pewnych modyfikacji w folderze, w którym się znajduje (zwykła zmiana nazwy, przeniesienie pliku). Kiedy normalnie zamykam program, to cofam wszystkie zmiany, które dokonałem. Problem pojawia się, gdy mój proces zostanie ubity z menedżera zadań. Kombinowałem na różne sposoby

najlepiej nie kombinować i w ogóle niczego takiego nie robić

Domyślnie user może nawet nie mieć uprawnień do zmian w folderze aplikacji (jeżeli będzie to "program files" to tylko user z uprawnieniami administratora może tam grzebać).
W aplikacjach które widywałem a którym się przerwało jakiś proces w połowie, zazwyczaj uruchamiały naprawę po prostu przy kolejnym uruchomieniu programu

0

Swoją drogą zastanawiam się też jak zablokować ubijanie procesu mojej aplikacji. Mam pewne czynności, które aplikacja "cofa" podczas zamykania jej, ale gdy ktoś ubije proces to wtedy nie cofną się zmiany które wprowadziłem.

Jeśli użytkownik chce sobie zrobić kuku, to niech sobie robi kuku. Dlaczego mu to uniemożliwiasz?

0

No rozumiem, że najłatwiejszym wyjściem jest danie informacji, że ubijając aplikację z menedżera jest niebezpieczne. Taki miałem plan od początku, ale pomyślałem, że skoro się da, to dlaczego nie zablokować?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.