【问题标题】:Prevent .NET from writing to C:\Windows\Temp防止 .NET 写入 C:\Windows\Temp
【发布时间】:2009-11-11 19:43:56
【问题描述】:

我有一个 C# 应用程序,我正试图将其推送到分布式网络。该应用程序在本地运行良好(一如既往),但是当我将其推送到网络时,它不起作用,因为它无法写入 C:\Windows\Temp 目录。我实际上并没有调用写入该目录的任何代码,但我想这是由于我对 Web 服务的调用引起的,给出了以下异常:

无法生成临时类(结果=1)。 错误 CS2001:源文件 'C:\WINDOWS\TEMP\cyalinh1.0.cs' 不能 发现错误 CS2008:没有指定输入'。请参阅内部异常 了解更多详情。

有什么方法可以阻止 .NET 写入 Temp 目录?它是 .config 文件中的设置吗?

更新

可以使用 SGEN 来阻止从 web 服务创建那些动态创建的类吗?

【问题讨论】:

  • 除了告诉你你遇到的问题是,当运行时执行你的程序集时,我没有其他答案,它实际上需要执行另一轮 Just In Time编译以将代码从 IL 转换为机器码。
  • 我能否通过 SGEN 对通过 Web 服务调用的 dll 进行这些动态类编译?

标签: .net web-services permissions


【解决方案1】:

似乎网络服务需要对 %SystemRoot%\Temp (MSDN) 的读/写权限。

来自here

如果您运行的是 ASP.NET 2.0 或 上面,您可以分配所需的 命令权限:

aspnet_regiis -GA MachineName\Account

blog post 包含有关如何更改用于此目的的 SystemRoot\Temp 文件夹位置的说明(以及有关如何使用反射器确定 web.config 中的设置以针对此类情况进行设置的说明)

【讨论】:

  • 是否还有设置或环境变量(例如TMPDIR)来设置临时目录路径?
  • 已编辑帖子以添加有关如何更改临时文件夹的说明的链接。
【解决方案2】:

您在这里遇到的问题是您正在使用一些自动生成临时代码的函数。它需要一个位置来执行此操作。所以是的,虽然您可以阻止它将代码写入该特定位置,但阻止它生成代码(必须存储在某处)的唯一方法是不使用生成临时类的函数。

【讨论】:

    【解决方案3】:

    运行此代码的进程(IIS 相关 NT 帐户?)应具有适当的权限集阅读更多 http://www.google.com/search?q=asp.net+writing+files+permissions

    【讨论】:

      【解决方案4】:

      乔希,

      我的猜测是,您正在拨打的电话正试图在目标 PC 上启动调试会话。在出现异常后,它正在尝试提取源文件。

      根本原因可能是 Web 服务调用中的异常。

      为了减轻对临时文件夹的写入,您可以在目标机器上禁用即时调试: 应用配置中的 <system.windows.forms jitDebugging="false"/> 之类的东西

      我做了一些挖掘工作。看起来问题可能出在服务器上,而不是客户端机器上。如果您为托管 Web 服务的用户添加临时文件夹的读/写权限,则可能没问题。抱歉上面的疯狂建议......

      【讨论】:

        【解决方案5】:

        搜索了这么多论坛,终于修复了它。这对我有用..给你!

        1. 右键单击 c:\windows\temp 文件夹

        2. 在安全选项卡下,将 iisuser 帐户添加到用户列表并授予读/写/执行访问(或)全部权限

        3. 重启网站

        就是这样 !!!...检查使用已部署 Web 服务的应用程序

        应该这样做..

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-07-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多