Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Удаление папки в Virtual Application Studio 2010 v8.0.11.35 (http://forum.oszone.net/showthread.php?t=188672)

Mishechka 18-10-2010 19:20 1521696

Удаление папки в Virtual Application Studio 2010 v8.0.11.35
 
Здравствуйте!

У меня Xenocode Virtual Application Studio 2010 v8.0.11.35

После запуска любой портированной программы с помощью Xenocode в папке "Program Files" появляется пустая папка "Xenocode". Можно ли исключить такое явление?

Я думаю, при создании портабельной программы, можно создать как-нибудь команду чтобы эта папка удалялась при закрытии программы. Типа такой:

Код:

@echo off
RD /S /Q "C:\Program Files\Xenocode"

Я такой cmd-файл создал и проверил, всё работает, но как его запускать из программы? Может есть и другие способы, такие, чтобы всё происходило незаметно для пользователя? Как думаете?

Спасибо.

Mishechka 20-10-2010 17:16 1523276

Я уточню свой вопрос:

Как сделать, чтобы cmd-файл сам запускался при запуске программы (exe-файла)?

Спасибо.

Iska 20-10-2010 23:07 1523552

Делайте наоборот: вместо запуска исполняемого файла — запускайте пакетный файл с примерно таким содержимым:
Код:

@echo off
start /wait "" "<путь к исполняемому файлу>"
RD /S /Q "C:\Program Files\Xenocode"


Mishechka 21-10-2010 12:42 1523910

Цитата:

Цитата Iska
Делайте наоборот: вместо запуска исполняемого файла — запускайте пакетный файл »

Дело в том, что я не могу обьяснить пользователю, что он вместо запуска программы (файл .exe) должен запускать запускать что-то другое (файл .cmd). Всё должно быть абсолютно скрыто от пользователя.

Я проверил Ваш код и вот что получилось:

@echo off
start /wait "" "Portable GOM Player 2.1.27.5031.exe"
RD /S /Q "C:\Program Files\Xenocode"

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

Задача такова:

Запускаться должен именно исполняемый файл программы, которая ставит пустую папку по адресу:
C:\Program Files\Xenocode, которая после запуска программы должна быть удалена, но только при условии, что она пуста, ибо у пользователя может быть уже установлена своя программа Xenocode, которая ставится в эту же папку, а мы её вдруг удалим. Этого допускать нельзя.

Спасибо.

El Sanchez 21-10-2010 18:12 1524180

Mishechka, ну так сделайте матрешку.
  1. Скачайте Bat To Exe Converter
  2. Измените скрипт от Iska:
    Код:

    @echo off
    start /wait "" "<путь к исполняемому файлу>"
    RD "<путь к Xenocode>"

  3. В настройках конвертера - Invisible application, чтобы не видеть консольное окно, вкладка Include - добавляете вашу программу, остальные настройки - как хотите.

Mishechka 21-10-2010 19:59 1524255

El Sanchez,
Я переделал код:

Код:

@echo off
start "" "Portable GOM Player 2.1.27.5031.exe"
RD "C:\Program Files\Xenocode"

Папку он не удаляет, да и проверки, что папка пуста в Вашем коде нет. Нужно удаление с условием.

При использовании Bat To Exe Converter происходят вообще странные вещи. Постоянно, при запуске, созданного им файла, появляется окно с вопросом что файл уже существует и нужно ли его перезаписать.

Такие дела...

Спасибо.

El Sanchez 21-10-2010 20:29 1524274

Mishechka, хорошо, давайте поточнее.
Настройки конвертера: вкладка Options - Visibility (Invisible Application), Working Directory (Temporary directory), Miscellaneous (Overwrite existing files), вкладка Include (Add/Добавляем вашу портативную программу Portable GOM Player 2.1.27.5031.exe), вкладка Versioninformation - Icon file (можете добавить иконку от программы, выдирается любым редактором ресурсов из исполняемого файла программы).

Цитата:

Цитата Mishechka
Папку он не удаляет »

Значит непустая

Цитата:

Цитата Mishechka
да и проверки, что папка пуста в Вашем коде нет. Нужно удаление с условием. »

RD без ключей удалит только пустую папку, иначе скажет что папка не пуста.


upd: прошу прощения за мою невнимательность. Папку нужно удалить ПОСЛЕ закрытия программы, поэтому start /wait все-таки. Предыдущий пост исправил.

Mishechka 21-10-2010 21:32 1524320

Цитата:

Цитата El Sanchez
Значит команда RD срабатывает раньше, чем создается папка. »

Но я просто запускал cmd-файл когда папка уже стояла и он её не удалял.
Цитата:

Цитата El Sanchez
Настройки конвертера: »

Сделаю как Вы сказали и проверю, но думаю, cmd-файл должен уже работать сам по себе.

Спасибо.

Исправил код и получилось:
Цитата:

Цитата Mishechka
Запускаю файл .cmd, который находится в одной папке с файлом .exe, выскакивает пустое консольное окно, через секунду появляется окно самой программы, консольное окно продолжает висеть, закрываю окно программы и оно закрывается, и только после этого закрывается консольное окно. »

Это уже было.

Спасибо.

Mishechka 21-10-2010 22:31 1524375

Для того, чтобы не разговаривать на пальцах я предлагаю скачать для экспериментов свою портабельную программу:



Попробуйте убрать папку, о которой я говорил:

C:\Program Files\Xenocode

Но с условием, что она пуста. О результатх сообщайте, жду с нетерпением.

Спасибо.

El Sanchez 22-10-2010 10:12 1524598

Mishechka, скачал, скомпилировал с вышеуказанными настройками, запустил получившийся exe-шник, после закрытия программы папку (пустую) удаляет.
Возможно вы пытаетесь запустить cmd-скрипт или уже скомпилированный файл на x64-системе, где папка Program Files для х86-программ имеет другое название, поэтому последнюю строчку напишите так:
Код:

RD "%ProgramFiles%\Xenocode"

Mishechka 22-10-2010 10:28 1524609

Цитата:

Цитата El Sanchez
Возможно вы пытаетесь запустить cmd-скрипт или уже скомпилированный файл на x64-системе »

Нет, у меня х86.

El Sanchez 22-10-2010 21:04 1525085

Mishechka, давайте так. Пишете в clear_xenocode.cmd:
Код:

@echo on
start /wait "" "Portable GOM Player 2.1.27.5031.exe"
RD "%ProgramFiles%\Xenocode"

Из консоли запускаете скрипт:
Код:

clear_xenocode.cmd > log.log
После отработки скрипта содержимое файла log.log приводите здесь.

Mishechka 24-10-2010 19:45 1526392

El Sanchez, сделал как сказали, вот содержимое файла log.log:

G:\Загрузка из интернета\Portable GOM Player 2.1.27.5031>start /wait "" "Portable GOM Player 2.1.27.5031.exe"

G:\Загрузка из интернета\Portable GOM Player 2.1.27.5031>RD "C:\Program Files\Xenocode"

El Sanchez 25-10-2010 14:04 1526893

Mishechka, пардон, нужно так:
Код:

clear_xenocode.cmd 1> log.log 2>&1
Если последняя строка лога не "Папка не пуста", а каталог не удаляется, то смотрите какими программами данный каталог используется (может быть открыт в файловом менеджере, проводнике и т.д.), если запись "Папка не пуста" присутствует, делайте выводы.

Mishechka 25-10-2010 16:49 1527017

El Sanchez, проверил, удаляется только пустая папка и лог тот, что я приводил выше.

Тогда я создал пустой текстовый файл в папке "Xenocode" и получил такой лог:

G:\Загрузка из интернета\Portable GOM Player 2.1.27.5031>start /wait "" "Portable GOM Player 2.1.27.5031.exe"

G:\Загрузка из интернета\Portable GOM Player 2.1.27.5031>RD "C:\Program Files\Xenocode"
Папка не пуста.

И папка не удалилась.

Всё нормально работает, но добиться того, чего я хочу так и не удалось.

Кстати, у Вас есть "Xenocode Virtual Application Studio 2010 v8.0.11.35"? Если нет, то могу выложить портабельную версию:



Вы сами сможете поэкспериментировать. Дело в том, что там есть возможности для работы с командной строкой и возможно всё, что мы делаем, можно сделать ещё при создании портабельного софта, и не делать это отдельно. Просто я в этом ничего не понимаю.

Спасибо.

Mishechka 26-10-2010 13:42 1527755

Подскажите, мы используем такой код:

Код:

@echo on
start /wait "" "Portable GOM Player 2.1.27.5031.exe"
RD "C:\Program Files\Xenocode"

Можно ли запускать exe-файл, находящийся в этой же папке (он у нас только один), не указывая его имени?
Тогда cmd-файл будет универсальным и его можно будет использовать с любой программой.

Спасибо.

Iska 26-10-2010 14:14 1527788

Цитата:

Цитата Mishechka
Можно ли запускать exe-файл, находящийся в этой же папке (он у нас только один), не указывая его имени? »

Что-нибудь наподобие:
Код:

@echo off
setlocal

for %%i in ("%~dp0*.exe") do (
    set sExeFileName=%%i
    goto OutFor
)
:OutFor

if defined sExeFileName (
    start /wait "" "%sExeFileName%"
    rd "%ProgramFiles%\Xenocode"
) else (
    echo Not found any *.exe in [%~dp0]
)

endlocal
exit /b 0

Будет взят первый из найденных *.exe в одной папке с пакетным файлом. Я видел здесь иной способ, без использования метки, но уже подзабыл.

Mishechka 26-10-2010 20:58 1528105

Iska, проверил, работает, но...

Я на форуме отыскал такой код:

Код:

@Echo Off
SetLocal EnableExtensions

For /R %%I In (*.exe) Do Start /Wait "" "%%I"

Работает точно так же как Ваш, но...

Как избавиться от консольного окна?
Как добиться того, чтобы не батник запускал исполняемый файл, а наоборот?


Спасибо.

amel27 28-10-2010 05:32 1529129

Цитата:

Цитата Mishechka
Как добиться того, чтобы не батник запускал исполняемый файл, а наоборот? »

ну подумайте сами - вы хотите изменить поведение "чужой" программы... но, это можно сделать только хаком этой программы, поэтому вам и предложили обходной вариант - подменить программу другим EXE (скриптом), который будет делать всё, что требуется: "подготовка", запуск программы, ожидание закрытия и "чистка"... если вы хотите, чтобы EXE был один, могу порекомендовать AutoIT, тогда последовательность шагов будет несколько другая:

- извлечение EXE программы (из самого скрипта);
- запуск программы, ожидание завершения;
- удаление EXE программы;
- удаление временных каталогов/файлов

Mishechka 29-10-2010 12:42 1530063

Цитата:

Цитата amel27
вы хотите изменить поведение "чужой" программы... »

Я вовсе не хочу ничего изменять, просто Вы говорите о программе (исполняемом файле), а я говорю о работе в Xenocode Virtual Application Studio 2010 v8.0.11.35. Я же выложил эту программу для скачивания, чтобы всем было понятно о чём речь. Скачайте и посмотрите, там есть такое:





Я просто не могу разобраться, что там можно сделать. Может быть то, что мы пытаемся сделать с помощью батника, можно сделать и без него? Может быть в командной строке указать условия запуска? Типа: "Запустился сам - запусти и мой батник"?

Цитата:

Цитата amel27
если вы хотите, чтобы EXE был один »

Xenocode и так делает на выходе один файл EXE.

Спасибо.


Время: 03:14.

Время: 03:14.
© OSzone.net 2001-