在IIS下调用MoveFileEx

时间:2011-06-06 10:43:05

标签: c# .net kernel dllimport

我正在使用这种代码在系统重启后删除文件。

[DllImport(“kernel32.dll”,SetLastError = true,CharSet = CharSet.Unicode)]
public static extern bool MoveFileEx(string lpExistingFileName,string pNewFileName,MoveFileFlags dwFlags);

VS中的本地iis-imitator一切都很好。 但是当我使用IIS时,这段代码失败而没有任何错误消息。

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

你可以帮我解决一下这个案子吗?

1 个答案:

答案 0 :(得分:1)

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

在您的评论中,您声明您正在传递MOVEFILE_DELAY_UNTIL_REBOOT标记。 documentation for MoveFileEx州:

  

仅当进程位于属于administrators组或LocalSystem帐户的用户的上下文中时,才能使用此值。

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