Просмотр темы форума
Тема: Не корректная работа команд
Здравствуйте.
Давно заметил такую особенность работы команд копирования файлов и 'Создать директории'. Если создавать папку на диске только для чтения например DVD-ROM, сетевой диск, то при попытке создания папки инсталятор выдает ошибку и прекращает работу, то есть ошибка именно программы и исталяция прерывается не корректно.
В инсталяторе есть возможность проверить доступ для записи файла перед опреациями, для папок можно только проверить существование папки, но не возможность записи в папку.
Поэтому вопрос можно ли добавить команду для папок проверки возможности записи в папки, ну или или сделать корректную обработку при невозможности создать папку инсталятором, чтобы он не выдавал ошибку при не возможности создать папку, а просто продолжал выполнение инсталятора.
Мы сейчас пока переводим все в Unicode, поэтому изменений в текущую версию сейчас вносить не будем.
Проверить директорию на запись можно с помощью команды Исходный код
str stemp = "c:\\path to check"
uint ok
stemp.faddname( "uniquefilename" )
if result = open( stemp, $OP_CREATE )
{
ok = 1
close( result )
deletefile( stemp )
}
macrox_setint( "writabledir", ok )
Спасибо.
Здравствуйте.
Заметил на днях, что переменная ‘isadmin’ не всегда правильно определена, то есть показывает, что нет прав админа, хотя запущено с правами админа, при этом пункт ‘Проверка требований - Администратор’ работает правильно.
Какой версией CreateInstall пользуйтесь и на какой Windows получаете такое?
Вставьте команду Redirect console output
Path: CUSTOM PATH
Filename: net.exe
Command-line parameters: session
Resulting variable: conout
После нее вставьте команду Message
Text:
isadmin=#isadmin#
#conout#
Запустите этот пример два раза - один с правами администратора, а другой раз с без прав с отмеченным Install script - Install root - Administrative rights are not required.
Сделайте оба раза скриншоты сообщения и пришлите на info@createinstall.com c темой CreateInstall.
Версия 6.4.0. Я это заметил на Windows 7x64 Максимальная. Я всегда использовал команду ‘Проверка требований - Администратор’, а тут появилась переменная 'isadmin' и я её использовал и она вроде работала, а когда я начал запускать файл установки для проверки на всех подряд Windows, то на некоторых Windows 7x64 Максимальная, переменная всегда выдавала 0, я для проверки добавил команду ‘Проверка требований - Администратор’ и она работала правильно, а isadmin=0.
Этих компьютеров с Windows с ошибкой сейчас нет, логику ошибки я не понял, но заметил.
Хорошо бы проверить эту ситуацию на компьютере, который неверно устанавливает isadmin. Сейчас isadmin присваивается в зависимости от результата выполнения net.exe session. Возможно на Максимальной версии есть какие-то особенности, тогда может стоит исправить на проверку как у Check Administrator.
Команда Check Administrator немного устарела, начиная с Windows Vista она проверяет наличие прав попыткой создания директории в Program Files.
Нашёл в чем причина при отключённой службе 'Сервера' переменная не правильно определяется, вот сообщение команды 'net.exe session'
--
Не запущена служба сервера.
Для вызова дополнительной справки наберите NET HELPMSG 2114.
--
Я так понял что многие команды 'net.exe' не работают с отключенной службой Сервера. В в Windows Vista и выше слишком большая зависимость функционала от второстепенных служб, которые в большей степени опасны в обычной жизне, чем полезны. На работоспособность Windows отключение многих служб и Сервера в частности не влияет и обычной жизни. При правельной настройки многие бесполезные службы будут выключены и в таком случае функциональность многих команд будет нарушена.
--
Возможно лучше использовать какие-то стандартные функции Windows API для получения переменных или на прямую из реестра что-то брать.
Я ещё с версии CreateInstall 2003 использовал много обходных путей и они досих пор работают в Windows 8.
И сейчас проверка существования стандартного системного файла в папке 'C:\Windows\SysWOW64' работат как определение 64 битной windows.
В очередной версии будем по другому проверять наличие прав администратора.
Стандартных функций к сожалению нет. Есть программные методы, но они довольно сложные.
Здравствуйте. У меня следующий вопрос:
Есть предопределённая переменная setuppath, в неё записывается каталог установки программы. Использую диалог "Диалог - путь установки", где этой переменной присваивается значение. Значение, вводится пользователем произвольно. В конце может быть слэш (\), а может и не быть. Смотря как введёт пользователь...
Далее, я хочу использовать эту переменную (#setuppath#) для записи в реестр и ini файлы. Мне бы хотелось принудительно поставить на конце один "\".
Для этого использую "Установить переменные". Имя переменной setuppath, значение #setuppath#\. В условии хотела поставить проверку содержит ли строка на конце "\": $setuppath.islast("\\").
Выдаётся ошибка "The value has the different type from the definition of function @islast". Что я делаю не так? Есть ли какие-то пути решения? Заранее спасибо.
Если делать через команду Установить переменные то должно быть так
Имя переменной: setuppath
Значение: #setuppath#\
Условие: !macrox_do("#setuppath#").islast('\')
Подставлять значение переменных: отмечен
Можно это же самое сделать с помощью команды Изменить переменные
Имя переменной: setuppath
Начальное значение: оставить пустым
Добавить два действия
Удаление крайних пробелов = R\
Добавить = \
Большое спасибо. Заработало )
Здравствуйте.
Как для юникодной версии теперь будет выглядеть код, я попробовал его изменить, но если в переменной русский текст код не работает.
---
str stemp = "c:\\path to check"
uint ok
stemp.faddname( "uniquefilename" )
if result = open( stemp, $OP_CREATE )
{
ok = 1
close( result )
deletefile( stemp )
}
macrox_setint( "writabledir", ok )
---
Лучше определить переменную в скрипте с нужным путем, например mypath
и тогда использовать следующий код
str stemp
ustr utemp
stemp = str( macrox_getstr( "mypath", utemp ))
...
10.07.25 Выпущен инсталлятор CreateInstall 8.11.2.
16.01.25 Выпущен инсталлятор CreateInstall 8.11.1.
19.06.24 Выпущен инсталлятор CreateInstall 8.11.0. подробнее
13.11.22 Выпущен инсталлятор CreateInstall 8.10.1.
21.05.22 Выпущен инсталлятор CreateInstall 8.10.0.