从网络驱动器运行时,为什么.NET应用程序崩溃?

时间:2020-03-06 14:52:35  来源:igfitidea点击:

从网络驱动器运行时,即使从本地硬盘驱动器运行完全相同的可执行文件,我的.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块。但是,调试版本显示抛出的异常是由InheritanceDemand引起的SecurityException。有任何想法吗?

解决方案

我们是否尝试过使用CasPol完全信任共享?

如果它是.NET 2.0或者更高版本,则ClickOnce的创建是为了真正解决此部署问题。我只使用它部署到网络共享。

这是Microsoft内置到.net框架中的安全性。这是一种阻止恶意软件以完全特权在本地运行的方法,因此我们无法在代码中以编程方式进行更改。

我们需要做的是增加对特定程序集的信任。我们可以在.NET Framework配置("控制面板"->"管理工具")中执行此操作,并且必须在每台计算机上完成。

与任何安全措施一样,这是一个痛苦的痛苦,但是它世界减少感染等。

我们可能已经完成了此操作,但是可以使用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

更多信息在这里。

实际上,这与以下事实有关:网络位置上的应用程序比本地HDD上的应用程序不那么受信任(由于.NET Framework的默认策略)。

如果我没记错的话,Microsoft最终纠正了.NET 3.5 SP1中的这种烦恼(在许多开发人员抱怨之后)。

我用Google搜索过:.NET Framework 3.5 SP1允许从网络共享启动托管代码!