Biblioteka DLL systemu Windows przechowywana w Debianie, a następnie pobrana z powrotem do systemu Windows, nie będzie już działać

2

Mam program, który chcę rozpowszechniać za pośrednictwem mojego serwera WWW z Debianem.

Wysłałem więc moje pliki - zawierające biblioteki DLL - na serwer. Po tym, jak pozwoliłem im pobrać się za pośrednictwem mojej aplikacji aktualizującej, wystąpił błąd. Próbowałem je więc pobrać, tak jak je wgrałem: Via Eclipse IDE. Ale błąd wystąpił również:

Tytuł okna błędu:

Main.exe - Zły obraz

Błąd:

Blabla.dll albo nie jest przeznaczony do uruchamiania w systemie Windows, albo zawiera   błąd […] Status błędu 0xc0000130.

Zastanawiam się więc, co powoduje uszkodzenie biblioteki DLL. Czy ma to związek z Eclipse lub Debianem?

EDYTOWAĆ Sumy kontrolne md5 oryginału, przesłany plik i pobrany plik są różne.

EDIT2 Wydaje się, że jest to problem między stroną kodową wybraną w Zaćmieniu, która jest UTF-8. Przetestuję go z cp1250 (szybki test zadziałał do tej pory, ale moja aplikacja uległa awarii) jutro.

EDIT3 Ponadto mój aktualizator nie działał poprawnie, interpretując pobrane pliki jako pliki tekstowe.

Incubbus
źródło
1
Bardzo dziwne ... Moim pierwszym zdaniem byłoby to, że Eclipse robi coś z plikami: / ... Jednym ze sposobów sprawdzenia, gdzie plik jest zmieniany, jest uzyskanie skrótu MD5 pliku przed przesłaniem go, po przesłaniu i po pobraniu go i zobacz, gdzie dzieje się zmiana.
Just Lucky Really
Systemy plików powinny być agnostyczne. Jedynym „czynnikiem X” będzie coś w rodzaju programu Mac, który potrzebuje danych w widelcu zasobów, ponieważ większość systemów plików nie obsługuje poprawnie rozszerzonych atrybutów i widełek zasobów. Jeden pomysł: czy można skompresować biblioteki DLL do przechowywania serwerów, a następnie skompresowane archiwum należy zdekompresować podczas aktualizacji po stronie klienta? Jeśli jest skompresowany przez GZip lub po prostu zwykły Zip, DLL powinien działać.
JakeGould
1
Md5 są takie same. Zgaduję, że spróbuję zapakować jutro.
Incubbus
2
Jeśli md5 są takie same, zawartość jest taka sama. Innymi słowy, nie ma nic złego w pliku.
psusi
Stwierdzono, że narzędzie md5 nie działało poprawnie (z jakiegokolwiek powodu). Inne narzędzia md5 pokazały mi różnicę w sumie kontrolnej.
Incubbus

Odpowiedzi:

0

Jednym z typowych powodów może być niepełne przesyłanie. Sprawdź rozmiar przesłanych bibliotek DLL, ponownie załaduj, jeśli rozmiar jest mniejszy niż oczekiwano.

Innym powodem jest konwersja plików między Windows i UNIX, która uszkadza pliki binarne, gdy są omyłkowo przesyłane w trybie tekstowym. Nie sądzę, żeby tak było (ponieważ wydaje się, że używasz HTTP, a nie FTP), ale warto to sprawdzić.

W przeciwnym razie będziesz musiał porównać swoją oryginalną bibliotekę DLL skompilowaną przez Eclipse z biblioteką DLL pobraną z serwera WWW i opublikować różnice tutaj w celu dalszej analizy.

Dmitry Grigoryev
źródło
2
Podejrzewam, że plik jest mylony z plikiem tekstowym. Prawdopodobnie magiczna liczba na początku pliku zostanie zmodyfikowana w ten sposób, co spowoduje pojawienie się komunikatu o błędzie.
jcoppens
Wydaje się, że jest to używane kodowanie plików, które ustawiłem na utf-8 w eclipse. Zrobiłem szybki test, ustawiając go z powrotem na cp1250. To wydawało się być sztuczką. Ale jutro sprawdzę to szczegółowo.
Incubbus
1
@Incubbus, kodowanie jest dla plików tekstowych ... eclipse powinien traktować go jako plik binarny ... ale znowu, jeśli kodowanie jest błędne i w rezultacie zniekształcił plik, jego suma md5 ulegnie zmianie.
psusi
@Incubbus, czy upewniłeś się, że pliki DLL, które próbujesz dystrybuować, są w pierwszej kolejności, jeśli po prostu skopiujesz je do swojej aplikacji? Może problem dotyczy procesu kompilacji (jeśli budujesz te biblioteki DLL) i / lub zgodności interfejsu między aplikacją a tymi bibliotekami DLL?
Dmitry Grigoryev
@DmitryGrigoryev sam zbudowałem biblioteki DLL, używając tego samego narzędzia, którego użyłem do zbudowania aplikacji (VS 2013). Aplikacja działa dobrze, jeśli nie korzystam z pobranych plików, ale te skopiowane z mojego wyjścia kompilacji. Ponadto nie ma znaczenia, czy uruchomię go za pomocą VS Debugger lub bez VS.
Incubbus