Страница 3 из 243

Добавлено: Вт июн 22, 2010 10:12
Avada
Рано радовался. :cry: При установленном и штатно работающем Autorun (конфигурация по умолчанию) применение команды cm_UnloadPlugins молча закрывает Тотал. Для меня это делает использование плагина при всех его достоинствах невозможным. Вынужден вернуться на MoveButton, отказавшись (надеюсь, временно) от прочего функционала.
(Собственно, это происходило и в самой первой версии Autorun, но тогда я по запарке не уделил этому на форуме должного внимания, а просто тихо откатился на прежний плагин.)

Добавлено: Вт июн 22, 2010 10:28
MVV
Avada писал(а):Рано радовался. :cry: При установленном и штатно работающем Autorun (конфигурация по умолчанию) применение команды cm_UnloadPlugins молча закрывает Тотал.
Подтверждаю. Но только при загруженном Autorun_MoveButton.dll, причем, не просто загруженном, а активном. Если закомментировать строчку MoveOptionsButton MOVE_LEGACY в конфиге, вылет уже не происходит.

Добавлено: Вт июн 22, 2010 12:08
Avada
MVV
Благодарю за уточнение, это позволяет в качестве временного решения хотя бы распределить нужный функционал между двумя плагинами.

Добавлено: Вт июн 22, 2010 15:40
Loopback
Исправил.

Использовал альтернативный RTL, и похоже в нем баг. В итоге Autorun_MoveButton просто не получал сообщение DLL_PROCESS_DETACH и не уничтожал поток.

Добавлено: Вт июн 22, 2010 15:44
MVV
Подтверждаю, что работает без вылетов. Win7x64. 8)

Я в своей HideMenu вообще CRT не использовал, чистый API, потому ни глюков, ни избыточного кода. :)

Добавлено: Вт июн 22, 2010 16:38
Avada
Тоже подтверждаю, что вылета больше нет. WinXP SP3.

Добавлено: Вт июн 22, 2010 21:54
Loopback
MVV писал(а):Я в своей HideMenu вообще CRT не использовал, чистый API, потому ни глюков, ни избыточного кода.
К сожалению, в Delphi совсем отключить использование RTL дело не очень тривиальное, поскольку в этом случае теряется возможность работать с некоторыми стандартными заголовочными файлами, в том числе Windows, где прописаны прототипы функций WinAPI. А так MoveButton тоже на чистом WinAPI.

Добавлено: Ср июн 23, 2010 20:46
Avada
По поводу добавления переменных.
Запускаю Тотал с подключённым Autorun. Смотрю переменные (cmd /k set или FS-плагин Environment Variables). В хвост значений переменной Path действительно добавилось C:\Totalcmd.
Перезапускаю TC (выполняется кнопкой, я использую ReloadTC). Снова смотрю список переменных. Теперь там в конце уже две штуки — C:\Totalcmd;C:\Totalcmd. Если повторять перезапуск, то до настоящего закрытия TC этот хвост будет наращиваться. То же самое происходит и после применения команды cm_UnloadPlugins.
В принципе, работать это не мешает, но я не уверен, что такое поведение правильно.

Добавлено: Ср июн 23, 2010 23:00
MVV
Кстати, да, мысль верная. Но тут надо подумать, что можно сделать. Ведь плагин должен как-то определить, что его черное дело уже выполнено:) откуда он знает, что его запускают из окружения, где переменные уже обновлены. И откуда он знает, не изменились ли значения переменных после того как он их изменял... Тут палка о двух концах... :!:

Добавлено: Ср июн 23, 2010 23:08
Loopback
Avada
Да, переменные же наследуются... Из тотала вызвали ReloadTC, из него опять тотал - а переменная осталась та же, и авторан опять добавляет строку. С выгрузкой плагинов тем более понятно.

Это, конечно, не очень хорошо. Но в принципе эта проблема касается только переменных окружения. Пожалуй, стоит изменить поведение по-умолчанию при параметре /A, чтобы текст не добавлялся, если такой уже есть в конце переменной. А если кому вдруг нужна возможность дублирования - ввести новый параметр, разрешающий дублирование. Хотя тоже не айс, конечно, если переменная будет дополнительно изменена позже.

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

Добавлено: Ср июн 23, 2010 23:45
MVV
Про маркер и я думал, но опять же, как узнать, надо ли дописывать переменную - а вдруг надо еще раз.

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

Добавлено: Ср июн 23, 2010 23:52
Loopback
MVV писал(а):Наверное, самая удачная мысль - ввести параметр, разрешающий добавление к переменной, если этот текст в ней уже есть. Так, если надо дописывать - юзер укажет параметр.
Вот так и сделаю, раз проблема не решается однозначно - пусть будет выбор. В конце-концов, главное чтобы это было документировано.

Добавлено: Чт июн 24, 2010 22:38
Loopback
Обновил, и добавил параметр /AD, разрешающий дублирование.

Добавлено: Чт июн 24, 2010 23:11
Avada
Loopback
Спасибо, теперь ситуация с переменными меня полностью устраивает.

Добавлено: Чт июн 24, 2010 23:29
MVV
Ага, работает. :)