【发布时间】:2013-12-13 20:25:56
【问题描述】:
编辑:我找到了解决方案。我原以为在尝试写入要比较的文件时会产生错误,实际上是在我尝试读取要比较的文件时产生错误。我在为比较可执行文件调用的命令中出现语法错误,导致未生成结果文件。当我试图读取一个不存在的文件时,我看到了访问冲突(是的,我应该检查文件是否存在)。我在让 BC 生成比较时遇到问题(出于某种原因,完全相同的命令可以在命令提示符下工作,但在从 C# 运行时不起作用),但如有必要,我会作为一个单独的问题提出。
我正在开发一个 .net 应用程序,用于比较构建之间的代码更改。
我尝试添加的应用程序的一部分利用了 compare 来生成两个代码块的 html 比较。
为了做到这一点,我从代码生成文件(请注意,我知道文件名会对多个用户产生冲突问题,我稍后会解决这个问题),然后从命令行调用超越比较可执行文件。我使用以下代码生成文件:
//write the code to a local disk file
System.IO.File.WriteAllText(@workingFolder + "\\File1.txt", (String)dataRow["OldMethodCode"]);
System.IO.File.WriteAllText(@workingFolder + "\\File2.txt", (String)dataRow["NewMethodCode"]);
workingFolder 的值是:"C:\inetpub\wwwroot"
我遇到的问题是,当运行此代码并尝试创建这些文件时,我得到以下异常:
[UnauthorizedAccessException: 访问路径 'C:\inetpub\wwwroot' 被拒绝。] System.IO.__Error.WinIOError(Int32 errorCode, String 也许FullPath)+216 System.IO.FileStream.Init(字符串路径,文件模式 模式、FileAccess 访问、Int32 权限、Boolean userRights、FileShare 共享,Int32 bufferSize,FileOptions 选项,SECURITY_ATTRIBUTES secAttrs,字符串 msgPath,布尔 bFromProxy,布尔 useLongPath, Boolean checkHost) +1430 System.IO.FileStream..ctor(字符串路径, FileMode 模式、FileAccess 访问、FileShare 共享、Int32 bufferSize、 FileOptions 选项、String msgPath、Boolean bFromProxy、Boolean useLongPath, Boolean checkHost) +214
System.IO.StreamReader..ctor(字符串路径,编码编码,布尔值 detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean checkHost) +187 System.IO.File.InternalReadAllText(字符串路径,编码编码,布尔校验主机)+90
_Default.gridView_SelectedIndexChanged(Object _sender, EventArgs e) +1024 System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean CauseValidation, String validationGroup) +1241
System.Web.UI.Page.ProcessRequestMain(布尔值 includeStagesBeforeAsyncPoint,布尔型 includeStagesAfterAsyncPoint) +3804
我已经尝试了很多方法来解决这个问题。与任何问题一样,您可能会忘记所有选择,但以下是我认为最有可能成功的选择(但没有奏效):
- 将 networkService 添加为 wwwroot 文件夹的完全权限
- 将具有完全权限的所有人添加到 wwwroot 文件夹
- 将应用程序池管理的管道模式更改为经典
- 将应用程序池设置为与自定义用户一起运行,并授予该用户对该文件夹的完全权限
- 授予几乎所有其他似乎与该文件夹相关的完全权限的用户
- 将文件夹移动到 wwwroot 之外的另一个本地目录并指向该目录,然后使用该文件夹尝试上述所有操作。
在所有情况下,我似乎都无法创建文件,更不用说访问它来运行比较了。
是否有人对如何解决此问题提供建议,或提供不需要创建文件的替代/更好的比较方法?
谢谢!
【问题讨论】:
-
是否需要将文件存放在 C:\inetpub\wwwroot 下?您可以尝试将其放在子文件夹中吗?
-
对不起,我应该在我的原始帖子中包含这个。我已经尝试将它放在一个子文件夹以及一个完全在结构之外的文件夹中。两种情况下的结果相同。
标签: c# asp.net .net iis permissions