我试图在不使用FullTrust权限集的情况下从网络共享运行.Net 2.0应用程序。我想创建一个新的权限集,它只具有我的程序集所需的权限,然后将其分配给共享路径上的exe。是否有可能做到这一点? 从我有限的实验中,我发现如果没有FullTrust,我无法从网络共享中获取任何应用程序。我尝试创建一个新的烫发套装,并尝试了Everything和其他烫发套装,但似乎都没有效果。有没有人有这方面的经验?
答案 0 :(得分:2)
您需要使用强名称对程序集进行签名,然后将强名称的cas-policy设置为完全信任。
为使用您的强名称签名的所有代码设置FullTrust的最简单方法是:
caspol.exe -q -m -ag MyZone -strong -hex [HexCodeOfYourStrongName] -noname -noversion FullTrust -name MyCode -description "Code trust for my code"';
如果您的代码被拆分为多个程序集,则需要使用该强名称对每个程序集进行签名。您可能需要设置SecurityPermission
- 属性以及链接请求,以确保调用方的安全性。
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.ControlPrincipal)]
答案 1 :(得分:0)
在.NET 3.5之前,您需要完全信任共享以从那里运行.NET应用程序。 Shawn解释了这个here:“在没有对默认CAS系统进行一些修改的情况下,我们在加载包含安全对象的程序集和授予它们策略之间处于永无止境的循环中....输入FullTrust列表。” / p>
在.NET 3.5中,通过“...默认授予FullTrust集合使其行为与直接从计算机上启动它们相同”(来自Shawn的另一篇文章here)来克服此限制
答案 2 :(得分:0)
赋予强大的名称FullTrust权限听起来不错,但不幸的是我的程序集引用了几个第三方COM Dll,如果我强名主程序集,它们也需要强名称。我猜测,将FullTrust赋予Shawn给出的路径是最好的解决方案: CasPol.exe -pp off -m -ag 1.2 -url file:// \ ShawnFa-Srv / Tools / * FullTrust