2011-03-30 30 views
6

我的應用程序需要刪除一些文件,但這應該發生,直到下一次Windows啓動。如何延遲文件刪除直到從我的程序進行下次重新啓動?

我現在正在做的是寫在RunOnce註冊表鍵此字符串值:

Command.com /c del c:\some file.ext 

,但我注意到一個問題,帶空格的路徑。我不得不說,我想這也是一個:

Command.com /c del "c:\some file.ext" 

但這並不解決問題,但要最糟糕的:沒有任何刪除的文件,而不考慮嵌入空間!

什麼是從我的程序中刪除文件延遲到下一次重新啓動的正確方法?

謝謝。

+0

什麼版本的Windows,這是?這是用cmd.exe還是XP之前的東西? – 2011-03-30 18:43:24

+0

即時通訊使用Windows 7 – Armin 2011-03-30 18:44:28

+2

@Armin:那麼沒有'command.com'。在Windows 9x中使用'command.com'!由於Windows XP我們使用'cmd.exe'代替! – 2011-03-30 18:45:24

回答

26

不要使用RunOnce,並且不使用Command.com。如果您堅持使用某些東西,請改用%COMSPEC% /c。不過,你有更好的選擇。

使用MoveFileExMOVEFILE_DELAY_UNTIL_REBOOT標誌來代替:

if not MoveFileEx(PChar(YourFileToDelete), nil, MOVEFILE_DELAY_UNTIL_REBOOT) then 
    SysErrorMessage(GetLastError); 
+0

哇。從這個答案中學到了很多。 +10。你溢出了我的日常學習配額(這是相當低的)。我將不得不明天跳過:) – 2011-03-30 18:52:26

+0

謝謝。這是一篇非常有用的文章。但還有3個問題:(1)我使用RunOnce鍵,因爲文件可能與某些程序或進程一起使用,而在RunOnce鍵中,它將在此之前被刪除。你的方式是否一樣? (2)文件和文件夾有何不同?也許我有沒有擴展名和文件夾同名的文件! (3)當我使用RunOnce鍵時,當我輸入很多字符串值時,它只刪除了其中的一些,我刪除了/ c開關,我看到這個錯誤:「參數太多」。你的方式也有這個問題嗎? – Armin 2011-03-30 19:00:39

+1

+1這是它應該如何完成 – 2011-03-30 19:06:11

1

只是猜測:看起來你正在運行「DOS」command.com只能使用短文件名。如果您使用的是Win2K及更高版本,請使用cmd.exe而不是command.com,並且使用雙引號。

2

改爲使用cmd.exe。這是自Windows NT以來的「新」命令提示符。

cmd.exe /c del "c:\some file.ext" 
+0

! – 2011-03-30 18:46:07

+0

用戶可以看到cmd窗口秒數 – 2013-02-26 16:25:11

+0

也可以使用8.3文件名並避免引用 – 2013-02-26 16:25:44

相關問題