Показать полную графическую версию : Удаление папки в 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-файла)?
Спасибо.
Делайте наоборот: вместо запуска исполняемого файла — запускайте пакетный файл с примерно таким содержимым:
@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-файл будет универсальным и его можно будет использовать с любой программой.
Спасибо.
Можно ли запускать 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"
Работает точно так же как Ваш, но...
Как избавиться от консольного окна?
Как добиться того, чтобы не батник запускал исполняемый файл, а наоборот?
Спасибо.
Как добиться того, чтобы не батник запускал исполняемый файл, а наоборот? »
ну подумайте сами - вы хотите изменить поведение "чужой" программы... но, это можно сделать только хаком этой программы, поэтому вам и предложили обходной вариант - подменить программу другим 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.