【问题标题】:Calling MoveFileEx under IISIIS下调用MoveFileEx
【发布时间】:2011-09-09 04:49:44
【问题描述】:

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

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

在 VS 中使用本机 iis-imitator 一切正常。 但是当我使用 IIS 时,这段代码会失败而没有任何错误消息。

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

你能帮我处理这个案子吗?

【问题讨论】:

    标签: c# .net kernel dllimport


    【解决方案1】:
    • 检查您对MoveFileEx() 的调用的返回值。如果为 false,则调用失败。
    • 致电Marshal.GetLastWin32Error 查找Win32 错误代码。这有时有助于缩小问题范围(尽管并非总是如此)。
    • 如果这不能说明问题,那么您需要告诉我们您要移动的文件及其新目标的完整路径名。

    在您的 cmets 中,您声明您正在传递 MOVEFILE_DELAY_UNTIL_REBOOT 标志。 documentation for MoveFileEx 声明:

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

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

    【讨论】:

    • 这意味着该进程没有足够的权限来执行此操作。你能告诉我们所涉及的路径吗?
    • 这是路径:C:\TempFiles\Test\Artur Okolity Test\Yo Preview 004\image.jpg。顺便说一句,我用参数调用这个方法:MoveFileFlags.DelayUntilReboot。
    • 您需要两个路径来移动文件。你只给了一个。
    • DelayUntilReboot 需要管理员或 LocalSystem
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    相关资源
    最近更新 更多