我们有一个旧的asp应用程序,它实例化一个.NET com可见类。在这个类中,我们进行一些序列化以将对象存储在会话中。
当我在我的测试类中调用以下代码行时,它工作正常。
var cereal = new XmlSerializer(couponApplicator.GetType());
然而,当它在网站中调用并且我正在调试时,它会抛出以下错误:
{"Cannot execute a program. The command being executed was \"C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727\\csc.exe\" /noconfig /fullpaths @\"C:\\WINDOWS\\TEMP\\rwot-yx9.cmdline\"."} System.SystemException {System.Runtime.InteropServices.ExternalException}
我想也许是权限相关所以我尝试将'EVERYONE'全部控制权交给windows / microsoft.net文件夹以及windows / temp文件夹。作为参考,我在Windows XP机器上运行它。有什么想法吗?
答案 0 :(得分:3)
想出来。
IIS Lockdown工具为windir目录中的所有* .exe可执行文件设置了拒绝权限。因此,我必须删除windows / microsoft.net / framework / v2.0 /文件夹中这两个文件的拒绝访问权限
的Cvtres.exe
CSC.EXE
然后,我给了IUSR和IWAM帐户读取和执行这些文件以及windows临时目录的权限。
这是一篇很好的帖子,解释了更多细节:http://www.evilrob.org/journal/archives/2005/05/16/iusriwam-accoun.html
答案 1 :(得分:0)
我发现我遇到了序列化程序集的问题,因为我在使用Windows应用程序时使用XML序列化来持久保存应用程序设置等。我发现通过使用sgen提前创建Serializer类型而不是在运行时动态创建它们,我在LUA环境中部署更成功。
如果你真的不需要在运行时动态创建它们,那么可能值得研究。这是非常直接的做法。只需在.NET项目中创建一个post build事件,该事件在包含要序列化的类型的程序集上调用sgen(确保它们标记为[Serializable()]
),只需包含在创建时创建的* .XmlSerializers程序集。部署时,不应该在使用XmlSerializer时担心任何特殊权限。