Я пробовал несколько способов получить MoveFileEx, работая с флагом DELAY_UNTIL_REBOOT без успеха. Ключ FileRenameOperations в реестре также показывает, что метод не выполнялся должным образом. Что может быть причиной?MoveFileEx не работает должным образом?
Звоню функцию MoveFileEx так:
MoveFileEx(localFile, oldFile, MoveFileFlags.MOVEFILE_DELAY_UNTIL_REBOOT);
Мой WINAPI код выглядит следующим образом:
[DllImport("kernel32.dll", EntryPoint = "MoveFileEx")]
internal static extern bool MoveFileEx(string lpExistingFileName, string lpNewFileName, MoveFileFlags dwFlags);
internal enum MoveFileFlags
{
MOVEFILE_REPLACE_EXISTING = 1,
MOVEFILE_COPY_ALLOWED = 2,
MOVEFILE_DELAY_UNTIL_REBOOT = 4,
MOVEFILE_WRITE_THROUGH = 8
}
Это приложение работает под учетной записью администратора. Может быть, это потому, что я использую 4 вместо 0x4 или это проблема с 64-битной? Благодаря!
EDIT: Операция возвращает ложное и код ошибки из 3.
Ну, '4 == 0x4'. Этот pinvoke будет интерпретироваться одинаково на x64 и x86. Вы подразумеваете, что ваш код работает отлично как 32-битный процесс? Как выглядит вызов MoveFileEx? –
от Microsoft, код C++ это: 'BOOL WINAPI MoveFileEx ( __in LPCTSTR lpExistingFileName, __in_opt LPCTSTR lpNewFileName, __in DWORD dwFlags );' –
Это не вызов. Это декларация, и мы уже знаем эту часть, потому что она находится в MSDN. Вам нужно показать * ваш * код, пожалуйста. –