[ Gosovic @ 09.04.2007. 09:39 ] @
Imam neke Dll-ove koji mi trebaju a ne zelim da ih distribuiram uz aplikaciju. Ima li neki nacin da se "ugrade" u exe fajl? U Visual Studiju postoji 'resources' i tu ubacim dll fajlove i oni se zaista ugrade u exe fajl (dokaz za to jeste da se exe poveca za velicinu istih) ali problem je sto ne mogu da ih koristim odatle, uvek mi trazi da imam fizicki dll. Daklem, pitanje je: kako napraviti referencu ka dll fajlovima koji bi se nalazili u resources? Na netu sam nasao primere kako neki fajl iz resursa moze da se "otpakuje" i iskoristi, recimo da se vidi ikonica, da se pusti wav ali nema nista kako bi se hendlovali dll-ovi tj. kontrole i funkcije iz njih.



[ negyxo @ 09.04.2007. 11:09 ] @
Napisi linker

http://www.microsoft.com/downl...14ae6a939b0&displaylang=en
[ mmix @ 09.04.2007. 12:27 ] @
Mozes i da iskoristis AssemblyResolve event iz AppDomain klase da se "nakacis" na proces ucitavanja assemblija i da odradis svoje ucitavanje ako sam .NET ne moze da locira tvoj DLL (sto ce ovde biti slucaj).

problem je u stvari druge vrste, resursi su isto toliko "vidljivi" koliko i file sistem (u neku ruku resursi i JESU primitivan file sistem ugradjen u sam executable). Nema zastite, svako ko ima bilo kakav resource editor moze da izvuce nazad tvoj DLL fajl, a onaj koji to ne ume ionako nece znati sta da radi sa tvojim DLLom na samom disku
Toplo preporucujem da potrazis neko drugo resenje.
[ Shadowed @ 09.04.2007. 13:52 ] @
Koji bi onda bio dobar nacin da neko neovlasceno koristi .dll?
Recimo, napravim class library koji koristim u svojoj aplikaciji i distribuiram ga sa njom. Kako spreciti da neko uzme taj .dll i koristi ga u nekoj svojoj aplikaciji?
[ Gosovic @ 09.04.2007. 14:23 ] @
Pogresno sam protumacen. Nije mi bitna bezbednost, niti da li ce neko da koristi moje dll-ove. Ionako u njima stoje stvari koje nisu preterano upotrebljive same za sebe. Nego hocu da prilikom distribucije programa imam samo exe, da ne vucem gomilu fajlova uz njega. Zato mi i treba neki sistem kako bi mogao da ugradim dll-ove u exe i da odatle mogu da se koriste. Jel ima nesto lakse sem linkovanja i onoga gore navedenog?
[ Shadowed @ 09.04.2007. 15:37 ] @
Nema veze, mene i dalje interesuje ono sto sam pitao ;)

Inace, onaj program koji je preporucio negyxo mi deluje kao prilicno jednostavno resenje.
[ mmix @ 09.04.2007. 19:02 ] @
Citat:
Shadowed: Koji bi onda bio dobar nacin da neko neovlasceno koristi .dll?
Recimo, napravim class library koji koristim u svojoj aplikaciji i distribuiram ga sa njom. Kako spreciti da neko uzme taj .dll i koristi ga u nekoj svojoj aplikaciji?


Prakticno nikako. Ti mozes da uradis code-signing i enkripciju, ali to negde mora da se dekriptuje u tvojoj aplikaciji, i tu je slaba tacka zastite (ako pribavim kljuc, mogu da uradim once-off dekripciju i ukradem dll. Cak i obfuskacija relativno sakriva implementaciju, ali samo do nivoa non-public elemenata, zbog prirode CLS metadata public elementi se ne mogu sakriti pa je opet prakticno izvodljivo procesom eliminacije skinuti bilo kakvu zastitu sa samog DLL-a, narocito ako koristi enkripcijske klase frameworka.

Alternativno, mozes kljuc za enkripciju da stavis na neki dongle, ali to opet moze da se skine kroz debager ako "pozajmim" i dongle, to stiti samo od prikrivene kradje softvera kad ne mozes uzeti i dongle uz program. Ako imas pristup svim elementima, .NET applikacije su za klasu lakse za razbijanje od C++/asm.

[ Gosovic @ 09.04.2007. 20:12 ] @
Skinuo sam ILMerge i uspeo sam da spojim dll i exe ali aplikacija radi do trenutka kad zatreba kontrola iz dll-a. Izbaci gresku "Could not load file or assembly ...". Ovako isto bude i kad dodam dll u resouces. Jel treba nesto u kodu da se ukuca kako bi program znao da trazi dll u exe-u?? Inace, dll sam dodao preko References.
[ negyxo @ 10.04.2007. 09:21 ] @
Ne znam u cemu je problem. ILMerge je poprilicno prost za rukovanje. Sve sto trebas da uradis je da kompajliras program i ostale dll-ove na koje se kacis. Kada to uradis, ostaje ti da u onom output direktorijumu sve mergujes sa ILMerge. Proveri da li sve radi pre nego sto mergujes.
[ bunker @ 10.04.2007. 10:55 ] @
Dll mozes da dodas kao embeded resource u exew fajl. U runtime-u, kao sto je mmx rekao mozes da koristis AppDomain.AssemblyResolve event, koji se ispaljuje kad framework ne moze da pronadje odredjeni dll u radnom direktorijumu aplikacije ili u GAC-u.
Hvatanjem tog eventa mozes da ucitas svoj assembly iz Assembly.GetExecutingAssembly().GetManifestResourceStream()... (nadam se da nisam pogresio, pisem napamet). Kad pokupis ManifestResourceStream, mozes da upotrebis megod Assembly.Load(Stream) i vratis ucitani dll. AssemblyResolve delegat ima povratnu vrednost i to je dll koji si ucitao ili nisi. Ako vrati null, dobicces exception. Nadam se da ovo nije previse konfuzno opisano.

De ne bi bilo napamet evo malo koda:
Code:

        static void Main()
        {
            AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

        static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("WindowsApplication3.res.ClassLibrary1.dll");
            int len = (int)stream.Length;
            byte[] bytes = new byte[len];
            stream.Read(bytes, 0, len);
            return Assembly.Load(bytes);
        }


kad pozoves sledeccu liniju, desicce se CurrentDomain_AssemblyResolve (ovo samo u slucaju da u radnom folderu nemas trazeni dll):
Code:

ClassLibrary1.Person p = new ClassLibrary1.Person();
Console.WriteLine(p.Name);


Pazi, "WindowsApplication3.res.ClassLibrary1.dll" je dll koji sam dodao kao "Embeded Resource". Nisam ga uzeo iz radnog foldera u koji ga je studio strpao, vecc sam ga iskopirao u drugi folder, iz kog sam da oznacio kao Embeded.
Nije me mrzelo, pa sam napravio neku pilot aplikaciju, koja radi taj posao. Izvini sto se nisam vezao za ILMerge, ali ja to duze vreme radim ovako.
[ Gosovic @ 10.04.2007. 22:33 ] @
Ma kakav ILMerge, ovo radi odlicno. Cak sam i dodao da program sam uzima dll fajlove koji mu trebaju, da bi mogao da natrpam vise dll-ova u exe.