Author Topic: Проблема с доступом к файлу при запуске через bat или ярлык  (Read 3678 times)

0 Members and 1 Guest are viewing this topic.

register

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Основано на http://crapware.aidf.org/forum/index.php?topic=1381.msg9685#msg9685

Воспроизводим:
создаем bat файл содержащий:
Code: [Select]
start Clickermann.exe "test.cms"Или создаем ярлык для Clickermann.exe, в конце пути дописываем "test.cms"

создаем config.ini содержащий:
Code: [Select]
[asd]
qwe=N832972257

создаем test.cms (в папке с Clickermann.exe) содержащий:
Code: [Select]
#autorun
#name "test"
WAIT(1)
EXECUTE("config.ini")
WAIT(1)
$zxcv = INIREAD("config.ini", "qwe", "asd")
$dialog = DIALOGBOX($zxcv, 1, 3)
HALT


Результат:
Файл "config.ini" успешно открывается.
Переменная $zxcv из "config.ini" не считывается (диалоговое окно выводит пустой текст)

Если указать полный путь ("c:/test/config.ini") - проблема остается. То есть, Clickermann не может получить доступ к файлу "config.ini".

Как быть?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
По дефолту с твоим скриптом всё работает.

P.S. попробовал сохранить в utf-8 с BOM - ошибка как у тебя. ini нужно сохранять или в 1251 или  utf-8 без BOM
пока не перезапишешь  :(


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Нет, не работает. Причем не работает и в 4.12 тоже.

Если запустить кликер через ассоциированный скрипт (двойной клик), то все работает.
Похоже где то ошибка в INIREAD
Интересно что при запуске через строку start Clickermann.exe test.cms в заголовке редактора не указывается путь до рабочего каталога, а при запуске через скрипт все показывается.

Кажется разобрался.
Нужно в параметре запуска указывать полный путь до скрипта!

Добавил запись в лог
Code: (clickermann) [Select]
#autorun
#logfile "Log.txt"
#name "test"

LOGSHOW (1, 100,100)
LOGWRITE ("Версия кликера: ",$_ver_self)
LOGWRITE ("Версия ситемы: ",$_ver_sys)
LOGWRITE ("Разрядность: ",$_arch_sys)
LOGWRITE ("Рабочая папка: ",$_pdir)
LOGWRITE ("Строка запуска: ",$_param_str)
LOGWRITE (" ")

$zxcv = INIREAD("config.ini", "qwe", "asd")
$dialog = DIALOGBOX($zxcv, 1, 3)
HALT

Лог:
Запуск через скрипт. Работает.
Code: [Select]
11:50:57 Версия кликера: 4.13.014
11:50:57 Версия ситемы:
11:50:57 Разрядность:
11:50:57 Рабочая папка: C:\Portable\Clickermann\projects\4.12\46\
11:50:57 Строка запуска: C:\Portable\Clickermann\Clickermann.exe;C:\Portable\Clickermann\projects\4.12\46\test.cms;

Запуск через батник (start c:\Portable\Clickermann\Clickermann.exe test.cms) Не работает.
Code: [Select]
11:51:06 Версия кликера: 4.13.014
11:51:06 Версия ситемы:
11:51:06 Разрядность:
11:51:06 Рабочая папка:
11:51:06 Строка запуска: c:\Portable\Clickermann\Clickermann.exe;test.cms;

Запуск через батник (start "c:\Portable\Clickermann\Clickermann.exe" "c:\Portable\Clickermann\projects\4.12\46\test.cms") Работает.
Code: [Select]
11:53:15 Версия кликера: 4.13.014
11:53:15 Версия ситемы:
11:53:15 Разрядность:
11:53:15 Рабочая папка: c:\Portable\Clickermann\projects\4.12\46\
11:53:15 Строка запуска: C:\Portable\Clickermann\Clickermann.exe;c:\Portable\Clickermann\projects\4.12\46\test.cms;

А еще оказалось что $_ver_sys и $_arch_sys ничего не возвращают, по крайней мере в XP.
Code: (clickermann) [Select]
LOGWRITE ("Версия ситемы: ",$_ver_sys)
LOGWRITE ("Разрядность: ",$_arch_sys)
HALT
« Last Edit: June 26, 2018, 11:02:04 AM by Oraven »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Естественно, что путь к скрипту должен быть полный, а как иначе. Никакой ошибки нет, мы ведь не меняли рабочую папку. При запуске из командной строки рабочая папка другая.
Думаю если командой сменить рабочую папку, то и без полного пути заработает, только какой в этом смысл, всё равно прописывать не важно где.

А еще оказалось что $_ver_sys и $_arch_sys ничего не возвращают, по крайней мере в XP.
Code: (clickermann) [Select]
LOGWRITE ("Версия ситемы: ",$_ver_sys)
LOGWRITE ("Разрядность: ",$_arch_sys)
HALT
Работает в XP SP3. Я их сразу проверял.
Quote
12:13:13 Версия ситемы: 5.1.2600
12:13:13 Разрядность: 32


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Естественно, что путь к скрипту должен быть полный, а как иначе. Никакой ошибки нет, мы ведь не меняли рабочую папку. При запуске из командной строки рабочая папка другая.

У автора темы пример
Code: [Select]
start Clickermann.exe "test.cms"К тому же другие функции, например TFREAD  при этом работают правильно.
Если ты о том что кликер в одной папке а скрипт в другой, сложил все в корневую папку кликера и запустил от туда, результат тот же.

Если указать полный путь ("c:/test/config.ini") - проблема остается. То есть, Clickermann не может получить доступ к файлу "config.ini".

Пробовал вписывать полный путь, тогда работает верно.

register

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Понял, что надо указывать полный путь, но этот вариант не имеет смысла если я хочу чтобы мой скрипт был портабельным.

Вспомнил про переменную, которая возвращает путь к рабочей папке. Она тоже не хочет работать. (при том же запуске через start Clickermann.exe "test.cms")


Не знаю зачем, попробовал записать заранее путь к папке в файле, и потом присваивать переменной.

Code: [Select]
//#autorun
#name "test"
$path = STRCONCAT(TFREAD("input.txt", 1), "config.ini")  //input.txt содержит строку: C:\QT Utils\Clickermann\ 

WAIT(1)
$zxcv = INIREAD($path, "qwe", "asd")

$dialog = DIALOGBOX("тек. ра. папка:"+$_pdir, 1, 3)
$dialog = DIALOGBOX("пауть из файла:"+$path, 1, 3)
$dialog = DIALOGBOX("переменная из конфиг.ини"+$zxcv, 1, 3)
HALT
И тут самое интересное.

При запуске через батник:
раб. папка: ""
путь из файла: "C:\QT Utils\Clickermannconfig.ini"
переменная из ини: "N8329...."

При запуске скрипта двойным кликом:
раб. папка: "C:\QT Utils\Clickermann\"
путь из файла: "C:\QT Utils\Clickermann\config.ini"
переменная из ини: "" (!)


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

PS: у меня был ini сохранен в ANSI, всегда до этого. Сейчас попробовал в UTF8 - при запуске через батник переменную из ини уже не возвращает. В остальном всё тоже.

PSS: bat:
Clickermann.exe "%cd%\TEST.CMS"
на первый взгляд вроде решает все эти проблемы.
« Last Edit: June 27, 2018, 05:29:59 AM by register »