Я работаю над приложением в C#, который делает следующие вещи:для Windows: Удаление EXE после выполнения
- Напишите EXE на диск
- Выполнить EXE через
Process.Start()
Я теперь пытается убедиться, что EXE будет удален после его закрытия. Самый простой способ сделать это - установить параметр FileOptions.DeleteOnClose
при создании EXE с использованием File.Create
.
Однако это означает, что EXE не может быть выполнен во время использования. Когда дескриптор файла закрыт, EXE немедленно удаляется, прежде чем его можно будет выполнить.
Есть ли способ сохранить «слабую ссылку» на EXE в моем приложении, которая не блокирует файл и позволяет его выполнять? В качестве альтернативы, есть ли способ разблокировать EXE для выполнения с открытым файловым дескриптором? Есть ли какие-либо другие очевидные решения, которые мне не хватает?
CLARIFICATION A: Мне известны другие методы удаления используемых файлов, которые в конечном итоге удалят файл (например, при перезагрузке). Однако я ищу способ удаления файла сразу после его запуска, который обрабатывается ОС (например, при запуске пакета, который сначала выполняет файл, а затем удаляет его, файл останется на диске, если пакетное задание будет завершено).
CLARIFICATION B: Чтобы объяснить большую картинку: приложение получает и расшифровывает исполняемый файл. После дешифрования файл должен быть выполнен. Тем не менее, я хочу, чтобы расшифрованная версия EXE не оставалась на диске. В идеале я также хочу, чтобы пользователи не копировали расшифрованный EXE. Однако, поскольку приложение дешифрования работает как один и тот же пользователь, это будет невозможно достичь по-настоящему безопасным способом, так как оба имеют одинаковые привилегии в системе.
Я не согласен. Мое использование DeleteOnClose на самом деле происходит из статьи, связанной с лучшим ответом данного конкретного вопроса. MoveFileEx в конечном итоге удалит файл (т. Е. После перезагрузки), а не сразу после его закрытия. Поэтому я рассматриваю этот вопрос как конкретный вопрос о последующем вопросе к одному из ответов на вопрос, на который вы ссылаетесь. – 0x90
То, чего вы пытаетесь достичь, не может быть выполнено с помощью 'Fileoptions.DeleteOnClose', потому что никакой программный файл не может быть выполнен, пока он открывается другим процессом для записи. (Я мог бы сказать вам, почему, но он ничего не делает с этой темой, и в этом комментарии недостаточно). Боюсь, вам нужно сделать это в три этапа: Write -> Start -> Delete. – mg30rg
Хм. Это звучит неплохо. Что вы на самом деле пытаетесь сделать? – Luaan