2011-06-06 17 views
0

我使用这种代码在系统重新启动后删除文件。在IIS下调用MoveFileEx

[的DllImport( “KERNEL32.DLL”,SetLastError =真,字符集= CharSet.Unicode)]
公共静态的extern BOOL MoveFileEx(串lpExistingFileName,串pNewFileName,MoveFileFlags dwFlags中);

一切都可以与VS本地iis模仿器。 但是,当我使用IIS这段代码失败,没有任何错误消息。

我可以建议这是IIS上的权限问题。 但这只是我愚蠢的建议。

你能帮我解决这个案子吗?

回答

1
  • 检查您的呼叫返回值为MoveFileEx()。如果它是假的,那么呼叫失败。
  • 致电Marshal.GetLastWin32Error找出Win32错误代码。这有时有助于缩小问题范围(尽管并非总是如此)。
  • 如果没有更多的光线,那么你需要告诉我们你正在移动的文件的完整路径名称,以及它的新目的地。

在您的评论你的状态,你是传递MOVEFILE_DELAY_UNTIL_REBOOT标志。 documentation for MoveFileEx指出:

只有当进程位于属于管理员组或LocalSystem帐户的用户的上下文中时,才能使用此值。

这似乎很可能是这个问题的根本原因。感谢@Logan指出了这一点。

+0

错误消息很短:访问被拒绝 – 2011-06-06 11:22:52

+0

这意味着进程没有足够的权利来执行此操作。你能告诉我们所涉及的路径吗? – 2011-06-06 11:28:43

+0

这是路径:C:\ TempFiles \ Test \ Artur Okolity Test \ Yo Preview 004 \ image.jpg。顺便说一句,我用参数调用这个方法:MoveFileFlags.DelayUntilReboot。 – 2011-06-06 11:53:48