Wczytywanie .dll przez internet

0

Czołem!

Piszę skrypty do AutoCADa w C# i w ramach próby rozwiązania problemu nieautoryzowanego rozpowszechniania owych, wymyśliłem, że owe skrypty będą wczytywane z serwera przez internet, z autoryzacją. Skrypt jest kompilowany zawsze do pliku .dll. Na komputerze, który ma korzystać z danego skryptu znajduje się plik dll, który ma wczytywać główny dll (rdzeń programu). Metoda ta działa, ale nie w sposób jaki sobie wyobrażałem.

Kod (w przykładach używane LAN, bez autoryzacji):

                    string fullAddress = "192.168.1.34/Aplikacja_Testowa3.dll";                    
                    Assembly.LoadFrom(fullAddress);

Problemem jest to, że wykorzystując ten kod, plik wczytywany jest odtwarzany w C:\Users\User\AppData\Local\assembly\dl3. Wystarczy go raz wczytać i nie trzeba już nigdy łączyć się z serwerem, a więc wygląda to tak, jakbym udostępnił cały program. Nawet usunięcie go nic nie daje, zostaje odtworzony przy uruchomieniu dllki, która ma go wczytać przez internet.

Próbowałem też wykorzystać klasę AppDomain z .NET Framework 4.5, ale albo coś namieszałem w kodzie, albo działa to w taki sam sposób jak ładowanie assembly, bo też powstaje kopia na dysku.

Kod użyty do AppDomain:

                    AppDomain dom = AppDomain.CreateDomain("test");
                    AssemblyName assemblyName = new AssemblyName();
                    assemblyName.CodeBase = "192.168.1.34/Aplikacja_Testowa3.dll";
                    Assembly assembly = dom.Load(assemblyName);
                    Type[] types = assembly.GetTypes();
                    AppDomain.Unload(dom);

Moje pytanie to: Czy jest to ogóle wykonalne takie rozwiązanie: wczytywanie głównej części programu przez internet bez przechowywania go na komputerze docelowym? Czy ten problem da się rozwiązać jakoś inaczej? Czy macie jakiekolwiek inne pomysły jak zabezpieczyć taką aplikację (czyli plik .dll, który wczytuje AutoCAD)?

1

jako, że użytkownicy Autocada zazwyczaj nie są za bardzo informatycznie rozwinięci to nie kombinowałbym za bardzo ze ściąganiem,kasowaniem plików;-)

Nie lepiej zabezpieczyć program za pomocą nr licencji i serwera autoryzacji (ewentualnie konto użytkownika)? Każdy klient dostaje unikalny nr licencji, który wprowadza w ustawienia. Następnie, podczas każdego użycia programu następuje połączenie z serwerem i sprawdzenie czy dany nr licencji jest "wolny". Jeżeli licencja jest wolna to program działa, jeżeli nie to program się wyłącza. Wydaje mi się najprostszym rozwiązaniem.

Plusy:

  • program może być rozpowszechniany dowolnie (można pomyśleć nad wersją demo, okrojona wersja gdy nie ma nr licencji)
  • program może być używany bezproblemowo na kilku różnych komputerach bez potrzeby rejestracji na każdym z osobna
  • program może używać kilku użytkowników (w ramach tej samej licencji lecz nie mogą używać w tym samym czasie)

Minusy:
-potrzebne połączenie z internetem (ale to chyba nie jest za duży problem teraz)
-gdy padnie serwer to użytkownicy mogą być wściekli;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1