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