我为一家生产商业产品的公司工作,我们目前正在尝试提供一种解决方案,使我们的一些大客户能够通过ClickOnce分发我们应用程序的客户端。
目的是我们的客户将ClickOnce安装部署到网络共享,然后通过电子邮件或其他方式向客户发送应用程序清单的链接。
我们已经能够成功地将ClickOnce安装的生产集成到我们的自动构建中(使用Mage命令行工具),然后我们就可以在客户端计算机上成功运行实际安装。但是,在安装和启动之后,我们的应用程序在运行时抛出SecurityException,因为它被拒绝访问FileIOPermission。我们的应用程序需要FullTrust权限,但似乎如果执行程序集的CodeBase位置是网络共享,则只授予LocalIntranet权限(不包括FileIOPermission)。
这里有一篇文章似乎表明这是一个非常常见的问题: http://blogs.msdn.com/shawnfa/archive/2004/12/30/344554.aspx
本文使用CasPol工具提供了一种解决方法,但我们必须在部署环境中的每台客户端计算机上运行此方法。这本身并不是一个问题,更重要的是,您需要客户端计算机上的管理员权限来执行CasPol工具的操作,而客户环境中的大多数客户端将不具备这些权限。
一篇文章也发表在同一博客上,似乎暗示运行CasPol修复程序的需求已经通过.NET 3.5 SP1的发布得到了缓解: http://blogs.msdn.com/shawnfa/archive/2008/05/12/fulltrust-on-the-localintranet.aspx
但是,我修改了我们的应用程序以专门针对框架的SP1版本,如本文所述: http://msdn.microsoft.com/en-us/library/bb398202.aspx#
执行此操作后,我们仍然遇到相同的SecurityException。所以我然后应用了文章中详述的一些特定的SP1 ClickOnce设置,但仍然没有乐趣。 如果我直接从发布网络共享启动应用程序我被授予了权限,那么似乎只有在ClickOnce的上下文中我们才会拒绝它们。
还有其他人遇到类似这些的问题吗?我想如果框架的SP1版本中存在关于这些权限的问题,其他人会在我们面前注意到它,因为我们还没有发布过ClickOnce解决方案。
答案 0 :(得分:3)
我想我在.NET 4.0上遇到过类似的问题,在午餐时有安全例外。我找到的解决方案是使用已批准的证书对清单进行数字签名(而不是默认的一个Visual Studio为您的项目生成的)。
这是ClickOnce部署清单中已知的“错误”(或设计)。
您的项目是否已签署?