View previous topic :: View next topic |
Author |
Message |
Gosha
Joined: 02 Feb 2005 Posts: 11
|
(Separately) Posted: Mon Feb 07, 2005 09:30 Post subject: |
|
|
SAM
Определить на 100%, где находятся эти файлы нельзя изначально!!!
Приведу несколько примеров, которые это продемонстрируют.
1. Записываем в [HKEY_CURRENT_USER\Software\Ghisler\Total Commander] IniFileName= (пустую строку). TC при этом ни чего не говоря запускается, но ни какого ini файла не создает, а следовательно и найти его нет ни какой возможности.
2. Запишем в этот же ключ недопустимое имя файла, т.е. в имени которого присутсвую не допустимые для имени файла символы. TC при этом весело запускается, но опять ни какого ini файла не создает, а следовательно см. п1.
Тоже происходит если использовать Quote: | кривые имена файлов | в качестве параметров в командной строке. |
|
Back to top |
|
|
TSergey
Joined: 24 Jan 2005 Posts: 49
|
(Separately) Posted: Mon Feb 07, 2005 09:56 Post subject: |
|
|
Gosha, с таким подходом можно дойти до стояния: Windows полностью глюкавый и вообще не работает.
Или в качестве INI-файла подсунут файл свопа.
Продолжать можно бесконечно.
Если есть возможность программно узнать имя файла, то никакие оправдания не могут прикрыть лень программиста. |
|
Back to top |
|
|
mozers
Joined: 16 Dec 2004 Posts: 82 Location: с Нижнего
|
(Separately) Posted: Mon Feb 07, 2005 10:22 Post subject: |
|
|
Gosha
ОК. Давайте исключим из рассмотрения те варианты, при которых сам ТС нормально работать не может.
Что это за работа, если при любом изменении настроек от выдает "Error: Cannot write ! Please remove the write protection!"?
TSergey
Quote: | никакие оправдания не могут прикрыть лень программиста |
Суров ты |
|
Back to top |
|
|
TSergey
Joined: 24 Jan 2005 Posts: 49
|
(Separately) Posted: Mon Feb 07, 2005 10:25 Post subject: |
|
|
SAM wrote: | TSergey
Quote: | никакие оправдания не могут прикрыть лень программиста |
Суров ты | Дык. Я сам такой же: лентяй еще тот.
Вообще программисты - это самые продвинутые лентяи. Ну кто еще, из-за того, что ему лень раз в день нажать кнопочку, напишет программу, которая будет делать это за него? |
|
Back to top |
|
|
Gosha
Joined: 02 Feb 2005 Posts: 11
|
(Separately) Posted: Mon Feb 07, 2005 12:09 Post subject: |
|
|
Тогды можно предложить следующию схему (актуальна, как для пог так и для плугинов)
1. Во время запуска определяем родительский процесс на принадлежность к TC (т.е. из TC ли нас запустили). По наличию %commander_path% определять не рекомендуется (особенно для плугинов)
1.1. Если да, то вытягивает командную строку и парсим ее
1.1.1 Пропарсили удачно и INI файл найден, то заканчиваем поиск.
1.1.2 В параметрах командной строки файла нет, тогда пытаемся искать стандартным образом (HKCU,HKLM,%windir%\wincmd.ini,сохраненные настройки)
1.1.2.1 Поиск прошел удачно. Заканчиваем процесс.
1.1.2.2 Неудачно. Предлагаем пользователю показать файл самостоятельно и заканчиваем поиск с любым результатом.
1.2. Если нет пытаемся стандартным образом определить местоположение (HKCU,HKLM,%windir%\wincmd.ini,сохраненные настройки)
1.2.1 Поиск прошел успешно. Заканчиваем.
1.2.2 Если неудачно, то предлагаем запустить прогу из под TC.
2. Если все таки файл так и найден, можно предложить поиск простым перебором всех INI файлов в системе. (т.е. Поиск файла по диску) |
|
Back to top |
|
|
Gosha
Joined: 02 Feb 2005 Posts: 11
|
(Separately) Posted: Tue Feb 08, 2005 09:32 Post subject: |
|
|
А теперь к делу.
Кто нить знает, как извлечь командную строку любого процесса, а то кроме создания дочернего потока в голову пока ни чего не приходит. |
|
Back to top |
|
|
Nik
Joined: 01 Jan 2005 Posts: 583 Location: Киров
|
(Separately) Posted: Tue Feb 08, 2005 15:28 Post subject: |
|
|
[quote="SAM"]
Nik
Лишь путь А имя?
Эта функция предназначена для ini-файлов плагинов, поэтому возвращает строку: путь_к_файлу_настройки\имя_плагина.
Как я уже говорил, если убрать имя и вставить вместо него wincmd.ini, то получится полный путь... Если имя wincmd.ini изменено, то такой вариант не подойдет... |
|
Back to top |
|
|
TSergey
Joined: 24 Jan 2005 Posts: 49
|
(Separately) Posted: Tue Feb 15, 2005 08:38 Post subject: |
|
|
Из радостей значений в реестре.
Не знаю кому пришло в голову так делать (точнее: догадываюсь, но не понимаю за что?): в реестре значения
Code: | [HKEY_CURRENT_USER\Software\Ghisler\Total Commander]
"IniFileName"=".\wincmd.ini"
"FtpIniName"=".\wcx_ftp.ini" |
означают ничто иное, как:
Code: | [HKEY_CURRENT_USER\Software\Ghisler\Total Commander]
"IniFileName"="%COMMANDER_PATH%\wincmd.ini"
"FtpIniName"="%COMMANDER_PATH%\wcx_ftp.ini" |
Сама по себе запись .\wcx_ftp.ini означает взять файл в текущем каталоге, но ТС это понимает по своему.
ЗЫ. Изменил код в своем сообщении http://forum.wincmd.ru/viewtopic.php?p=1780#1780 |
|
Back to top |
|
|
mozers
Joined: 16 Dec 2004 Posts: 82 Location: с Нижнего
|
(Separately) Posted: Tue Feb 15, 2005 11:13 Post subject: |
|
|
TSergey
Точка в пути - это лишь один из многочисленных вариантов...
Все вы ребята - умные и проблему решаете самым трудным способом.
А я уже говорил о великом множестве ньюансов... И все их надо учесть...
А мы - по простому Немного через одно место. Но... работает всегда правильно
http://total.altruistic.ru/files/GetTotalINI.zip
(спасибо Shura за дельные коррективы) |
|
Back to top |
|
|
Volniy
Joined: 15 Dec 2004 Posts: 585 Location: Местный
|
(Separately) Posted: Tue Feb 15, 2005 11:31 Post subject: |
|
|
TSergey wrote: | Из радостей значений в реестре.
Не знаю кому пришло в голову так делать (точнее: догадываюсь, но не понимаю за что?): |
Эта фича появилась с версии 4.54 (16.07.01), когда переменная %COMMANDER_PATH% еще не существовала (та была введена только в версии 6.0 (17.11.03)).
Quote: | Сама по себе запись .\wcx_ftp.ini означает взять файл в текущем каталоге, но ТС это понимает по своему. |
А какой, собственно, каталог является текущим для командера при его запуске? Да свой же, родимый По крайней мере именно из него он по-дефолту грузит необходимые библиотеки и другое свое файло (totalcmd.inc, иконки, библиотеки архиваторов, описание панелей инструментов и пр.). |
|
Back to top |
|
|
TSergey
Joined: 24 Jan 2005 Posts: 49
|
(Separately) Posted: Tue Feb 15, 2005 11:36 Post subject: |
|
|
Volniy wrote: | А какой, собственно, каталог является текущим для командера при его запуске? | Тот, который я укажу в ярлыке, а не:
Volniy wrote: | Да свой же, родимый |
ЗЫ. Со времен появления МелкоМагка нелюблю программы, которые считают себя умнее пользователя. |
|
Back to top |
|
|
vserd
Joined: 26 Apr 2005 Posts: 118
|
(Separately) Posted: Mon Jun 13, 2005 18:41 Post subject: |
|
|
Quote: |
А какой, собственно, каталог является текущим для командера при его запуске?
Тот, который я укажу в ярлыке, а не:
Да свой же, родимый
|
Если в ярлыке запуска указаны полные пути к INI, тогда, берет из них как и ожидается. А если нет, тогда из %CommanderPath% в не зависимости от указания текущей директории.
Пример 1:
Создаем ярлык на рабочем столе.
Прописываем ему командную строку C:\TC\Totalcmd.exe /i=.\dir1\my.ini, в качестве рабочей директории ставим D:\ запускаем коммандер, смотрим на пути: C:\TC\dir1\my.ini.
пример 2:
Создаем ярлык на рабочем столе.
Прописываем ему командную строку C:\TC\Totalcmd.exe /i=..\dir1\my.ini, в качестве рабочей директории ставим D:\1\ запускаем коммандер, смотрим на пути: ..\dir1\my.ini.
Так что можно заявлять как о баге, но лучше не нужно. Пока нет нормального программного интерфейса к этим пременным, пускай будет такое определение чем "правильное".
Давайте Кристиана попробуем порасспрашивать на эту тему. Особенно когда передается относительный путь из ярлыка? Кто может грамотно написать на английском текст с проблемой? (у меня только чтение по английскому, писать не могу, и на слух не воспринимаю :((( ) |
|
Back to top |
|
|
Nik
Joined: 01 Jan 2005 Posts: 583 Location: Киров
|
(Separately) Posted: Mon Jun 13, 2005 20:08 Post subject: |
|
|
А может попросить Гислера - пусть внедрит в плагинный интерфейс функцию для определения путь к ini-файлу? Это дело-то на пару минут... |
|
Back to top |
|
|
mozers
Joined: 16 Dec 2004 Posts: 82 Location: с Нижнего
|
(Separately) Posted: Mon Jun 13, 2005 20:30 Post subject: |
|
|
2Nik
Насколько я знаю, Гислер пообещал (еще до выхода 6.53) сделать пару переменных $MAININI и $FTPINI.
Но как известно - обещанного три года ждут |
|
Back to top |
|
|
mozers
Joined: 16 Dec 2004 Posts: 82 Location: с Нижнего
|
(Separately) Posted: Tue Jun 14, 2005 16:58 Post subject: |
|
|
Уже известный вам архивчик дополнился примером на Delphi (автор - Vladimir Serdyuk)
Алгоритм тот же - путь к файлам INI извлекается из появляющегося на мгновение окна About.
Рекомендуется все таки записать найденнные пути куда нибудь (лучше - в качестве относительных) чтобы не дергать то и дело дракона за хвост |
|
Back to top |
|
|
|