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

问题描述 投票:31回答:6

从网络驱动器运行时我的.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。有任何想法吗?

c# .net networking securityexception permissionset
6个回答
22
投票

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

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

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


14
投票

你尝试过使用CasPol to Fully Trust a Share吗?


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
投票

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


0
投票

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

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

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


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.