2009-02-08 6 views
32

W porządku, więc pracuję nad programowaniem własnego instalatora w języku C#, a chciałbym zrobić coś podobnego do plików w .exe, więc mogę do File.Copy (plik, filedir);Jak przechowywać pliki w EXE

Lub, jeśli nie jest to możliwe, czy istnieje inny sposób robienia tego, co próbuję zrobić?

+0

z ciekawości, dlaczego programujesz własnego instalatora? –

+2

Aby zobaczyć, czy mógłbym, faktycznie. – S3THST4

+29

Ludzie zawsze mówią ci "Kod kodu, jeśli chcesz nauczyć się języka", dopóki nie zakodujesz czegoś, to wszystko NIE REINWALUJ TEH WHEEEEEEL – Rayne

Odpowiedz

28

Nie zakodowałbym mojego własnego instalatora, ale jeśli naprawdę chcesz umieścić pliki w swoim zestawie, możesz użyć silnie wpisanych zasobów. W oknie dialogowym właściwości swojego projektu otwórz kartę "Zasoby", a następnie dodaj plik. Będziesz wtedy mógł pobrać plik za pomocą:

ProjectNamespace.Properties.Resources.MyFile 

Wtedy będziesz mógł pisać osadzonego zasobu na dysku przy użyciu:

System.IO.File.WriteAllBytes(@"C:\MyFile.bin", ProjectNamespace.Properties.Resources.MyFile); 
+0

Dziękuję za odpowiedź, tego właśnie szukam. Dobrze, więc używam File.Copy(); i potrzebuję przeciążenia stringami dla Filepatha. Wszelkie sugestie: PS- Próbowano. ToString(); – S3THST4

+0

Co jest nie tak z projektem C#, który podłączyłem do powyższego, wraz z kodem źródłowym? Czy tego nie szukasz? –

+0

Zaktualizowany, aby pokazać, jak można następnie zapisać plik na dysku za pomocą System.IO.File.WriteAllBytes –

4

Zgaduję, ale jeśli próbujesz przechowywać zasoby w aplikacji przed kompilacją, możesz w Eksploratorze projektów kliknąć prawym przyciskiem myszy plik, który chcesz dodać, wybrać właściwości i zmienić typ na Embedded Resource .

Następnie można uzyskać dostęp do zasobów osadzonych później, korzystając z instrukcji z tego KB: http://support.microsoft.com/kb/319292

8

Szczerze mówiąc, chciałbym zaproponować wam NIE stworzyć swój własny instalator. Jest wiele problemów związanych z tworzeniem instalatorów. Nawet najwięksi twórcy instalatorów nie tworzą już swoich własnych instalatorów, tylko tworzą niestandardowe pakiety MSI.

Użyj programu instalacyjnego Mirosoft (MSI). Jest to słuszne. Stwórz własny niestandardowy front-end, ale nie odtwarzaj już bardzo skomplikowanego koła, które istnieje.

AKTUALIZACJA: Jeśli robisz to po to, by się czegoś nauczyć, nie chciałbym myśleć o tym jako o "instalatorze". Możesz mieć ochotę wziąć swoje "badania" i wykorzystać je pewnego dnia, i szczerze mówiąc, tak właśnie kończymy z tak wieloma problemami, kiedy pojawiają się nowe wersje systemu Windows. Ludzie tworzą własne koła z niepoprawnymi założeniami.

To, co naprawdę próbujesz zrobić, nazywa się "pakowaniem" i naprawdę musisz się dokładnie zapoznać z formatem Executable PE, ponieważ mówisz o zmianie struktury obrazu PE na dysku.

Można symulować to, do pewnego stopnia, z umieszczaniem plików w zasobach, ale tak naprawdę nie robią to instalatorzy lub samorozpakowujące.

Oto link do samouczka Self-Extractor, ale nie ma go w języku C#.

Nie wiem wystarczająco dużo o wymaganiach .NET PE, aby wiedzieć, czy można to zrobić za pomocą wykonywanego kodu zarządzanego, czy też nie.

UPDATE2: Jest to prawdopodobnie więcej tego, czego szukasz, to osadza pliki w zasobach, ale tak jak powiedziałem, tak naprawdę nie jest tak, jak robią to profesjonalni instalatorzy lub self-extractory. Myślę, że istnieją różne ograniczenia co do tego, co możesz umieścić jako zasoby. Ale tutaj jest jak na Self-Extractor Demo napisane w C#.

+1

Zdecydowanie poszukałbym wszystkich dostępnych instalatorów, ZANIM zrobię to sam. To jest coś, o czym mówiłem w "Nie odkrywaj ponownie koła, chyba że planujesz dowiedzieć się więcej o kołach" http://www.codinghorror.com/blog/archives/001145.html –

+0

Jedyny powód, dla którego byłem , miałem sprawdzić, czy mogę. Nie próbuję zrobić tego adv lub cokolwiek, po prostu próbuję utworzyć 1 formularz, który po kliknięciu Instaluj i po prostu umieszcza pliki w katalogu. – S3THST4

+1

S3thst4, Zdecydowanie wykonuj badania na temat dostępnych instalatorów, ale nie daj się zniechęcić, większość dostępnych instalatorów pozostawia wiele do życzenia, szczególnie MSI, na pewno jest miejsce na ogromne ulepszenia, instalatorzy nie są w stanie chodzić zaparkuj, bądź przygotowany na ciężką przeszczep. –

0

w przypadku chcesz po prostu do przechowywania wielu plików w jednym pliku przechowywania (i wypakować pliki stamtąd, interakcji itp.) możesz również sprawdzić NFileStorage, .net file storage. napisane w 100% .NET C# ze wszystkimi dostępnymi źródłami. Jest również wyposażony w interpreter wiersza poleceń, który umożliwia interakcję z poziomu wiersza poleceń.

Powiązane problemy