Вызов MoveFileEx под IIS - PullRequest
0 голосов
/ 06 июня 2011

Я использую этот вид кода для удаления файла после перезагрузки системы.

[DllImport ("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern bool MoveFileEx (строка lpExistingFileName, строка pNewFileName, MoveFileFlags dwFlags);

Все нормально с собственным iis-имитатором в VS.Но когда я использую IIS, этот фрагмент кода завершается сбоем без сообщения об ошибке.

Я могу предположить, что это проблема с разрешениями на IIS.Но это только мое глупое предложение.

Не могли бы вы помочь мне с этим делом?

1 Ответ

1 голос
/ 06 июня 2011
  • Проверьте возвращаемое значение вашего звонка на MoveFileEx(). Если это ложь, то вызов не удался.
  • Позвоните Marshal.GetLastWin32Error, чтобы узнать код ошибки Win32. Иногда это помогает сузить проблему (хотя и не всегда).
  • Если это не проливает больше света, вам нужно будет указать нам полные пути к файлу, который вы перемещаете, и к его новому назначению.

В ваших комментариях вы заявляете, что проходите флаг MOVEFILE_DELAY_UNTIL_REBOOT. Документация для MoveFileEx гласит:

Это значение может использоваться, только если процесс находится в контексте пользователя, который принадлежит к группе администраторов или учетной записи LocalSystem.

Кажется вероятным, что это является основной причиной проблемы. Спасибо @Logan за указание на это.

...