Почему происходит сбой моего приложения .NET при запуске с сетевого диска? - PullRequest
31 голосов
/ 29 сентября 2008

Сбой моего приложения .NET при запуске с сетевого диска, даже если тот же исполняемый файл отлично работает с локального жесткого диска?

Я попытался проверить «Полное доверие» следующим образом:

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." );
}

Однако это не помогает, я имею в виду, что приложение запускается и блок catch никогда не вводится. Однако отладочная сборка показывает, что выброшенное исключение представляет собой SecurityException, вызванное InheritanceDemand. Есть идеи?

Ответы [ 6 ]

22 голосов
/ 29 сентября 2008

Это действительно связано с тем фактом, что приложения в сетевом расположении менее надежны, чем на локальном жестком диске (из-за политики по умолчанию .NET Framework).

Если я не ошибаюсь, Microsoft наконец исправила это раздражение в .NET 3.5 SP1 (после того, как многие разработчики пожаловались).

Google google'd it: .NET Framework 3.5 SP1 Позволяет запускать управляемый код из общей сетевой папки!

14 голосов
/ 29 сентября 2008

Вы пытались использовать CasPol, чтобы полностью доверять акции ?

11 голосов
/ 29 сентября 2008

Возможно, вы уже сделали это, но вы можете использовать CasPol.exe, чтобы включить FullTrust для указанного сетевого ресурса.

Например

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

Подробнее здесь .

3 голосов
/ 29 сентября 2008

Если это .NET 2.0 или выше, ClickOnce был создан, чтобы действительно помочь с этим материалом для развертывания. Я использую только сетевые ресурсы, используя это.

0 голосов
/ 06 марта 2018

Все, что мне нужно было сделать, это пометить файлы только для чтения (возможно, не связанные) и предоставить все разрешения, за исключением полного доступа, аутентифицированным пользователям. Я сталкивался с этой проблемой до того, как это сделал, когда у меня была настройка общего сетевого ресурса только для пользователей домена.

Я нашел этот обходной путь, потому что ни у общих ресурсов администратора (\ server \ C $), ни у моего собственного компьютера не было этой проблемы.

Редактировать: Приложение ориентировано на .NET 3.5, здесь нет SP1 (версия 3.5.7283)

0 голосов
/ 29 сентября 2008

Это встроенная Microsoft безопасность в .net framework. Это способ предотвращения локального запуска вредоносных программ с полными привилегиями, поэтому вы не можете изменить это программно в коде.

Что вам нужно сделать, это повысить доверие к определенным сборкам. Вы делаете это в .NET Framework Configuration (Панель управления-> Администрирование), и это должно быть сделано на каждом компьютере.

Как и в случае любых мер безопасности, это боль в заднице, но она поможет миру быть менее инфицированным и т. Д ...

...