Войти

Показать полную графическую версию : Удаление папки в Virtual Application Studio 2010 v8.0.11.35


Mishechka
18-10-2010, 19:20
Здравствуйте!

У меня 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
Я уточню свой вопрос:

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

Спасибо.

Iska
20-10-2010, 23:07
Делайте наоборот: вместо запуска исполняемого файла — запускайте пакетный файл с примерно таким содержимым:
@echo off
start /wait "" "<путь к исполняемому файлу>"
RD /S /Q "C:\Program Files\Xenocode"

Mishechka
21-10-2010, 12:42
Делайте наоборот: вместо запуска исполняемого файла — запускайте пакетный файл »
Дело в том, что я не могу обьяснить пользователю, что он вместо запуска программы (файл .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
Mishechka, ну так сделайте матрешку.

Скачайте Bat To Exe Converter (http://f2ko.de/downloads/Bat_To_Exe_Converter.zip)
Измените скрипт от Iska:

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

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

Mishechka
21-10-2010, 19:59
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
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 (можете добавить иконку от программы, выдирается любым редактором ресурсов из исполняемого файла программы).

Папку он не удаляет »
Значит непустая

да и проверки, что папка пуста в Вашем коде нет. Нужно удаление с условием. »
RD без ключей удалит только пустую папку, иначе скажет что папка не пуста.


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

Mishechka
21-10-2010, 21:32
Значит команда RD срабатывает раньше, чем создается папка. »
Но я просто запускал cmd-файл когда папка уже стояла и он её не удалял.
Настройки конвертера: »
Сделаю как Вы сказали и проверю, но думаю, cmd-файл должен уже работать сам по себе.

Спасибо.

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

Спасибо.

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

http://upload.com.ua/pics/getfile_ru.gif (http://upload.com.ua/get/902032893/Portable GOM Player 2.1.27.5031.rar)

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

C:\Program Files\Xenocode

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

Спасибо.

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

RD "%ProgramFiles%\Xenocode"

Mishechka
22-10-2010, 10:28
Возможно вы пытаетесь запустить cmd-скрипт или уже скомпилированный файл на x64-системе »
Нет, у меня х86.

El Sanchez
22-10-2010, 21:04
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
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
Mishechka, пардон, нужно так:

clear_xenocode.cmd 1> log.log 2>&1

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

Mishechka
25-10-2010, 16:49
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"? Если нет, то могу выложить портабельную версию:

http://upload.com.ua/pics/getfile_ru.gif (http://upload.com.ua/get/902042360/Portable Xenocode Virtual Application Studio 2010 v8.0.11.35.rar)

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

Спасибо.

Mishechka
26-10-2010, 13:42
Подскажите, мы используем такой код:


@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
Можно ли запускать 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
Iska, проверил, работает, но...

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


@Echo Off
SetLocal EnableExtensions

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


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

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

Спасибо.

amel27
28-10-2010, 05:32
Как добиться того, чтобы не батник запускал исполняемый файл, а наоборот? »
ну подумайте сами - вы хотите изменить поведение "чужой" программы... но, это можно сделать только хаком этой программы, поэтому вам и предложили обходной вариант - подменить программу другим EXE (скриптом), который будет делать всё, что требуется: "подготовка", запуск программы, ожидание закрытия и "чистка"... если вы хотите, чтобы EXE был один, могу порекомендовать AutoIT (http://forum.oszone.net/forum-103.html), тогда последовательность шагов будет несколько другая:

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

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

http://ipicture.ru/uploads/101029/hX7XEjRYwm.png

http://ipicture.ru/uploads/101029/65Fpxw3kS3.png

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

если вы хотите, чтобы EXE был один »
Xenocode и так делает на выходе один файл EXE.

Спасибо.




© OSzone.net 2001-2012