2008-09-29 9 views
31

Moja aplikacja .NET ulega awarii po uruchomieniu z dysku sieciowego, nawet jeśli ten sam plik wykonywalny działa idealnie dobrze z lokalnego dysku twardego?Dlaczego moja aplikacja .NET ulega awarii po uruchomieniu z dysku sieciowego?

Próbowałem sprawdzanie „pełne zaufanie” tak:

try 
{ 
    // Demand full trust permissions 
    PermissionSet fullTrust = new PermissionSet(PermissionState.Unrestricted); 
    fullTrust.Demand(); 

    // Perform normal application logic 

} 
catch(SecurityException) 
{ 
    // Report that permissions were not full trust 
    MessageBox.Show("This application requires full-trust security permissions to execute."); 
} 

Jednak to nie pomaga, przez co rozumiem aplikacja uruchamia się i blok catch nie zostanie wprowadzony. Jednak kompilacja debugowania pokazuje, że zgłoszony wyjątek jest wyjątkiem SecurityException spowodowanym przez InheritanceDemand. Jakieś pomysły?

+0

Kiedy mówisz, że "nie", jak dokładnie to uda? Czy są błędy? – TheSoftwareJedi

+0

Czy kod, który napiszesz, znajduje się w Złapie? –

+0

właśnie dostałem ten sam problem i nie znalazłem jeszcze rozwiązania, będę oglądał to pytanie ... – Epaga

Odpowiedz

22

Rzeczywiście ma to związek z tym, że aplikacje w lokalizacji sieciowej są mniej zaufane niż na lokalnym dysku twardym (z powodu domyślnej strategii platformy .NET).

Jeśli się nie mylę, Microsoft ostatecznie poprawił tę irytację w .NET 3.5 SP1 (po tym, jak wielu deweloperów narzeka).

I google'd go: .NET Framework 3.5 SP1 Allows managed code to be launched from a network share!

+0

Zweryfikowano to poprzez pobranie przez użytkownika wersji Service Pack i wszystko jest dobrze. Dzięki! –

+0

Doskonale! Musiałem używać CasPol wcześniej z narzędziem, które stworzyliśmy dla niektórych naszych klientów. To ból, który wymaga stworzenia skryptu i uruchomienia go przed wywołaniem narzędzia, tylko dlatego, że jest uruchamiany z lokalizacji sieciowej. –

+6

Aktualizacja: Problem rozwiązany w dodatku SP1 3.5 SP2 wydaje się ponownie pojawiać po zainstalowaniu środowiska wykonawczego .NET 4.0. –

3

Jeśli jest to .NET 2.0 lub nowszy, ClickOnce został stworzony, aby naprawdę pomóc w tym wdrożeniu. Wdrażam je tylko do udziałów sieciowych.

0

To jest zabezpieczenie wbudowane przez microsoft do frameworka .net. Jest to sposób zatrzymywania szkodliwego oprogramowania, który może być uruchamiany lokalnie z pełnymi uprawnieniami, więc nie można tego zmienić programowo w kodzie.

Co należy zrobić, to zwiększyć zaufanie określonych zestawów. Robisz to w konfiguracji systemu .NET Framework (Panel sterowania-> Narzędzia administracyjne) i musisz to zrobić na każdym komputerze.

jak w przypadku innych środków bezpieczeństwa, jest to ból-in-the-ass, ale pomoże świat się mniej zarażony etc ...

+0

, ale dlaczego jego okno komunikatu nie jest wyświetlane? – Epaga

+2

... powstrzymywanie złośliwego oprogramowania ... Ile złośliwego oprogramowania znalazłeś napisanego w.NETTO? Dowolny plik wykonywalny .NET będzie mógł być uruchamiany z sieci przy użyciu pełnych uprawnień (domyślnie). Jedyną różnicą jest to, że .NET nie zezwalał na to domyślnie podczas pracy systemu Windows. –

+3

cóż, zablokowanie zarządzanego kodu przy jednoczesnym umożliwieniu wykonania binariów Win32 nie jest środkiem bezpieczeństwa ... – user19871

11

Być może już to zrobione, ale można użyć CASPOL. exe, aby umożliwić FullTrust dla określonego udziału sieciowego.

Na przykład

cd c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 
CasPol.exe -m -ag 1.2 -url file:///N:/your/network/path/* FullTrust 

Więcej informacji here.

+0

Bardzo dobra odpowiedź, udała się dla mnie! – davidhq

+0

Lazy dev version: '' C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319> CasPol.exe -m -ag 1.2 -zakładka Intranet FullTrust'' – mhvelplund

0

Wszystko co musiałem zrobić, to zaznaczyć pliki tylko do odczytu (ewentualnie niepowiązane) i podać wszystkie uprawnienia z wyjątkiem Pełna kontrola dla uwierzytelnionych użytkowników. Napotykałem ten problem, zanim to zrobiłem, kiedy miałem konfigurację udziału sieciowego tylko dla użytkowników domeny.

Odkryłem to obejście, ponieważ ani udziały administratora (\ server \ C $), ani udziały mojego komputera nie miały tego problemu.

Edit: App jest kierowanie .NET 3.5 SP1 nie tutaj (wersja 3.5.7283)