【发布时间】:2013-07-11 09:32:18
【问题描述】:
IIS 应用程序似乎无法写入临时文件夹(需要使用 Excel 互操作)。
对路径“C:\Temp\temp_file_name.xlsx”的访问被拒绝。
异常详细信息:System.UnauthorizedAccessException:访问 路径 'C:\Temp\temp_file_name.xlsx' 被拒绝。
这是堆栈跟踪:
[UnauthorizedAccessException: Access to the path 'C:\Temp\temp_file_name.xlsx' is denied.]
System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) +10550675
System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite) +863
System.IO.File.Copy(String sourceFileName, String destFileName) +12
ExcelOperations.FileHelper.CopyFile(String sourcePath, String destinationPath) +477
WebExtensions.PersonalPriceListDataExchange.CreateNewQueryBtn_Click(Object sender, EventArgs e) +427
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +115
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +140
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +29
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2981
现在,从所有人的角度来看,这看起来像是典型的“缺少权限”案例,但我已经修改了 Temp 文件夹以允许特殊组“Everyone”完全访问...
可能缺少什么?
编辑:
忘记说了!
当我使用管理帐户登录该站点时,该应用程序可以运行。但是,任何其他帐户(尽管成功登录 IIS 站点)都无权访问该文件夹。同样,奇怪的是我已授予“所有人”完全访问权限,但仍然无法正常工作。
有问题的应用程序是 MS CRM 4.0 扩展(位于 CRM ISV 文件夹内,因此它是一个子站点),使用与 CRM 本身相同的应用程序池。但是,我怀疑这是否与 CRM 本身有关。我认为这可能是 IIS / 权限问题。
编辑 2:
我在我的应用程序中添加了一段简单的代码:
throw new Exception(Page.User.Identity.Name + " " + HttpContext.Current.User.Identity.Name);
显然,这会抛出当前使用的身份的当前名称。身份很好 - 即它是属于域的普通用户。我什至可以添加此特定用户并授予他对该文件夹的权限,但 它仍然失败。 :(
编辑 3:
我已打开临时文件夹的审核。
这是结果(我不得不编辑一些信息):
A handle to an object was requested.
Subject:
Security ID: -the domain and login of the currently logged user-
Account Name: -the current username-
Account Domain: -the current domain-
Logon ID: 0x5e3194d
Object:
Object Server: Security
Object Type: File
Object Name: C:\Temp\temp_file_name.xlsx
Handle ID: 0x0
Process Information:
Process ID: 0x13f0
Process Name: C:\Windows\System32\inetsrv\w3wp.exe
Access Request Information:
Transaction ID: {00000000-0000-0000-0000-000000000000}
Accesses: DELETE
READ_CONTROL
SYNCHRONIZE
ReadData (or ListDirectory)
WriteData (or AddFile)
AppendData (or AddSubdirectory or CreatePipeInstance)
WriteEA
ReadAttributes
WriteAttributes
Access Reasons: DELETE: Unknown or unchecked
READ_CONTROL: Unknown or unchecked
SYNCHRONIZE: Unknown or unchecked
ReadData (or ListDirectory): Unknown or unchecked
WriteData (or AddFile): Denied by Integrity Policy check
AppendData (or AddSubdirectory or CreatePipeInstance): Unknown or unchecked
WriteEA: Unknown or unchecked
ReadAttributes: Unknown or unchecked
WriteAttributes: Unknown or unchecked
Access Mask: 0x130197
Privileges Used for Access Check: -
Restricted SID Count: 0
审核报告中指定的用户被授予对该文件夹的完全访问权限。
【问题讨论】:
-
你的文件的文件名是什么?看来您正在尝试编写 '
' ?文件名中不允许使用 字符。 -
我显然已经从异常中清除了文件名,因为我无法分享我正在处理的太多内容。这是一个普通的 Excel 文件名。
-
您是否尝试过重启 IIS?
-
抱歉,不要认为这太明显了,Excel 文件名有什么秘密?而且我认为值得一提,因为通过您所做的替换,您正在创建非法文件名,这可能是您问题的一部分。
-
sigh 文件名包含客户端的名称。我认为这足以隐藏文件名。它不包含非法字符。