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

时间:2008-09-29 14:21:28

标签: c# .net networking securityexception permissionset

我的.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。有什么想法吗?

6 个答案:

答案 0 :(得分:22)

这确实与网络位置上的应用程序不太可信,然后在本地硬盘上这一事实有关(由于.NET框架的默认策略)。

如果我没弄错,微软最终在.NET 3.5 SP1中纠正了这种烦恼(在许多开发者抱怨之后)。

我谷歌了:.NET Framework 3.5 SP1 Allows managed code to be launched from a network share!

答案 1 :(得分:14)

您是否尝试使用CasPol to Fully Trust a Share

答案 2 :(得分:11)

您可能已经这样做了,但您可以使用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

更多信息here

答案 3 :(得分:3)

如果这是.NET 2.0或更高版本,则创建ClickOnce以真正帮助处理此部署内容。我只使用它来部署到网络共享。

答案 4 :(得分:0)

这是由microsoft内置到.net框架中的安全性。这是一种阻止恶意软件在本地运行并具有完全权限的方法,因此您无法在代码中以编程方式更改此内容。

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

与任何安全措施一样,它是一种痛苦的屁股,但会帮助世界减少感染等...

答案 5 :(得分:0)

我所要做的就是将文件标记为只读(可能不相关),并将除完全控制之外的所有权限授予经过身份验证的用户。我之前遇到过这个问题,当时我只为域用户设置了网络共享。

我发现了这种解决方法,因为管理员共享(\ server \ C $)和我自己的PC共享都没有这个问题。

修改:应用程序的目标是.NET 3.5,此处没有SP1(版本3.5.7283)