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)?