Delphi - улучшите мой код, чтобы удалить исполняемый файл [duplicate]

Хорошо, хотя я уже рассмотрел ответы font-size: 0; и not implemented CSS3 feature, после попытки выяснил, что ни одно из них не является реальным решением.

На самом деле нет даже одного обходной путь без сильных побочных эффектов.

Затем я решил удалить пробелы (это ответы об этом аргументе) между inline-block divs из моего источника HTML (JSP), превратив это:

<div class="inlineBlock">
    I'm an inline-block div
</div>
<div class="inlineBlock">
    I'm an inline-block div
</div>

к этому

<div class="inlineBlock">
    I'm an inline-block div
</div><div class="inlineBlock">
    I'm an inline-block div
</div>

, который является уродливым, но работает.

Но подождите минуту ... что, если я создаю свой div внутри Taglibs loops (Struts2, JSTL и т. д.)?

Например:

<s:iterator begin="0" end="6" status="ctrDay">
    <br/>
    <s:iterator begin="0" end="23" status="ctrHour">
        <s:push value="%{days[#ctrDay.index].hours[#ctrHour.index]}">
            <div class="inlineBlock>
                I'm an inline-block div in a matrix 
                (Do something here with the pushed object...)
           </div>
       </s:push>
    </s:iterator>
</s:iterator>

Абсолютно не мыслимо встроить все это, это означало бы

<s:iterator begin="0" end="6" status="ctrDay">
    <br/>
    <s:iterator begin="0" end="23" status="ctrHour"><s:push value="%{days[#ctrDay.index].hours[#ctrHour.index]}"><div class="inlineBlock>
                I'm an inline-block div in a matrix             
                (Do something here with the pushed object...)
           </div></s:push></s:iterator>
</s:iterator>

, что невозможно прочитать, трудно

Решение, которое я нашел:

использует комментарии HTML, чтобы связать конец одного div с началом следующего!

<s:iterator begin="0" end="6" status="ctrDay">
   <br/>
   <s:iterator begin="0" end="23" status="ctrHour"><!--
    --><s:push value="%{days[#ctrDay.index].hours[#ctrHour.index]}"><!--
        --><div class="inlineBlock>
                I'm an inline-block div in a matrix             
                (Do something here with the pushed object...)
           </div><!--
    --></s:push><!--
--></s:iterator>
</s:iterator>

Таким образом, у вас будет читаемый и правильно отложенный код.

И, как положительный побочный эффект, HTML source, хотя и заражены пустым комментарием , приведет к правильному отступу;

возьмем первый пример: imho this:

    <div class="inlineBlock">
        I'm an inline-block div
    </div><!--
 --><div class="inlineBlock">
        I'm an inline-block div
    </div>

лучше этого

    <div class="inlineBlock">
         I'm an inline-block div
    </div><div class="inlineBlock">
         I'm an inline-block div
    </div>

Надеюсь, что это поможет ...

23
задан ata 21 June 2013 в 22:41
поделиться

7 ответов

Вы можете использовать планировщик окон для планирования задачи для удаления вашей программы через X секунд.

Командная строка: http://msdn.microsoft.com/en-us/library/bb736357 % 28VS.85% 29.aspx

Или API: http://msdn.microsoft.com/en-us/library/aa383608%28VS.85%29.aspx

3
ответ дан Alex Reitbort 31 August 2018 в 20:24
поделиться

Один из способов сделать это - использовать функцию MoveFileEx с флагом MOVEFILE_DELAY_UNTIL_REBOOT и адресатом NULL. Согласно документации, это:

регистрирует файл lpExistingFileName , который должен быть удален при перезапуске системы. Если lpExistingFileName ссылается на каталог, система удаляет каталог при перезапуске, только если каталог пуст.

17
ответ дан Greg Hewgill 31 August 2018 в 20:24
поделиться

Я решил эту проблему (используя Visual Basic), создав пакетный файл, который выполняется, пока процесс все еще запущен, ждет 1сек, поэтому программа может закрыть себя и удалить программу.

Возможно, вам понадобится чтобы изменить его для этого, удалите все в одной папке. После выполнения вашей задачи просто вызовите del(), и он должен работать.

 Sub del()
    Dim file As System.IO.StreamWriter
    file = My.Computer.FileSystem.OpenTextFileWriter("del.bat", True)
    file.WriteLine("")
    file.WriteLine("timeout 1")
    file.WriteLine("echo Y | del *.*")
    file.Close()
    Process.Start("del.bat")
    Me.Close()
End Sub
0
ответ дан Julian 31 August 2018 в 20:24
поделиться

Вы можете запустить другое приложение, которое будет ждать завершения родительского процесса, а затем удалить его исполняемый файл.

2
ответ дан Pavel Alexeev 31 August 2018 в 20:24
поделиться
process.start("cmd /c ping localhost -n 3 > nul & del filepath")
exit

заменить process.start любой командой, которую использует ваш язык программирования для запуска программ с аргументами

заменить путь к файлу путь к вашему exe

заменить exit командой для завершение вашей программы

14
ответ дан Samy Bencherif 31 August 2018 в 20:24
поделиться

Пока этот exe не будет в памяти, он не сможет удалить себя. Тем не менее, он может зарегистрировать в системе задачу по удалению себя после заданного промежутка времени, когда ожидается, что он завершит выполнение.

0
ответ дан techzen 31 August 2018 в 20:24
поделиться

Это можно сделать в Linux. Вы обнаружите, что вообще невозможно удалить исполняемый файл в Windows. Тем не менее, вы можете удалить Windows EXE для следующей перезагрузки: http://www.howtodothings.com/computers/a1402-delete-a-running-exe.html

Если вы хотите, чтобы файл был удален после его запуска, вы можете просто попросить пользователя его удалить. Если причина, по которой вы хотите, это мера безопасности, то то, что вы делаете, ошибочно. Пользователь может обойти это, просто сделав копию файла первым.

4
ответ дан uckelman 31 August 2018 в 20:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: