我在C#這做以下的事情申請工作後刪除EXE:的Windows:執行
- 通過
Process.Start()
我寫一個EXE磁盤
File.Create
創建EXE時設置參數FileOptions.DeleteOnClose
。 但是,這意味着EXE在使用時無法執行。一旦文件句柄關閉,EXE會在執行之前立即被刪除。
有沒有辦法在我的應用程序中保留對EXE的「弱引用」,它不鎖定文件並允許執行它?另外,有沒有辦法解開EXE執行文件句柄仍然打開?還有其他明顯的解決方案嗎?
CLARIFICATION A:我知道有其他方法可以刪除正在使用的文件,這些文件最終會刪除文件(例如重新啓動時)。然而,我正在尋找一種方法,在開始執行時立即刪除該文件,而該文件是由操作系統處理的(例如,當運行一個首先執行該文件然後刪除該文件的批處理文件時,如果該批處理作業已終止,該文件將保留在磁盤上)。
CLARIFICATION B:解釋更大的圖片:應用程序接收並解密可執行文件。解密後,該文件應該被執行。但是,我想確保解密版本的EXE不會保留在磁盤上。理想情況下,我也想阻止用戶複製解密後的EXE。但是,由於解密應用程序是以同一用戶的身份運行的,因此這兩者在系統上具有相同的權限時,將無法以真正安全的方式實現。
我不同意。我對DeleteOnClose的使用實際上來自於該特定問題的評分最高的答案中鏈接到的文章。 MoveFileEx將最終刪除文件(即重新啓動後),而不是在關閉文件後立即刪除文件。因此,我認爲這個問題是您所鏈接問題的答案之一的具體後續問題。 – 0x90 2015-03-31 07:24:19
您試圖實現的功能無法使用'Fileoptions.DeleteOnClose'來完成,因爲在其他進程寫入時無法執行程序文件。 (我可以告訴你爲什麼,但它對這個話題沒有任何作用,而且在評論中沒有足夠的空間)。恐怕你必須分三步完成:寫 - >開始 - >刪除。 – mg30rg 2015-03-31 07:34:03
嗯。這聽起來像個壞主意。你究竟在做什麼? – Luaan 2015-03-31 08:02:02