31

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

4

6 回答 6

22

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

如果我没记错的话,微软终于在 .NET 3.5 SP1 中纠正了这个烦恼(在很多开发人员抱怨之后)。

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

于 2008-09-29T14:26:38.920 回答
14

您是否尝试过使用CasPol 完全信任共享

于 2008-09-29T14:23:31.923 回答
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

更多信息在这里

于 2008-09-29T14:26:14.320 回答
3

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

于 2008-09-29T14:25:25.850 回答
0

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

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

与任何安全措施一样,这很痛苦,但会帮助世界减少感染等等……

于 2008-09-29T14:26:04.913 回答
0

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

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

编辑:应用程序面向 .NET 3.5,此处没有 SP1(版本 3.5.7283)

于 2018-03-06T16:15:08.333 回答