|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А с чем ещё такой глюк происходит? Вот я и отследил, что это связано с некорректной работой Венды с кодировками в ДОС окне. Java - это тоже ДОС-приложение... Мелкомягкие ничего не говорили - я следил.
У меня самогО лицензионная версия с голограммами номерами и книжкой.
" правильная" - что есть критерий её " правильности"?
|
07 May 2011 11:16 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Есть у меня ещё одно подозрение, что весь гимор с кодировками происходит
" на лету". В частности, у меня не работал appletviewer.exe от Java - путался
с путями типа:
C:\\WORK\\J2SDK1_4\\BIN\\appletviewer.exe
C:\WORK\J2SDK1_4\BIN\appletviewer.exe
вот эти двойные слэши появлялись " на лету" и это приводило к тому, что путь
не находился. Пришлось написать виндавозную затычку, меняющую пути " по пути",
назвать её applet.exe и ассоциировать с ней все системные вызовы appletviewer.exe
по умолчаниям. applet.exe далее сама вызывает appletviewer.exe с параметрами:
| | | | Code: // здесь много лишнего за комментами - отслеживал что происходит в отладке...
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow) { MSG msg; //---------------------- Запускаем appletviewer.EXE -------------------------------------- Buf[0]=0x22; // ->"<- if(strlen(lpCmdLine)!=0) { // ClsBuff[256]; // result=GetCurrentDirectory(256,ClsBuff); // strcpy(ClsName, "");//--- смотрим имя CurrentDirectory -- // strncat(ClsName, ClsBuff, result); // MessageBox(0,ClsName," CurrentDirectory:",MB_ICONWARNING);
// MessageBox(0, lpCmdLine, " CommandLine:", MB_ICONWARNING); strcpy(pat, ""); strcpy(pat, "appletviewer "); // C:\\WORK\\J2SDK1_4\\BIN\\appletviewer.exe // C:\WORK\J2SDK1_4\BIN\appletviewer.exe strcpy(mes,""); strcpy(tmp,""); // выделяем только имя файла этими манипуляциями strcpy(mes,strrchr(lpCmdLine,0x5c)); // ищем strrev(mes); strncat(tmp,mes,strlen(mes)-1); strrev(tmp); // MessageBox(0, tmp, " Command:", MB_ICONWARNING); // strcpy(mes,""); // иначе добавляем кавычки strcat(pat, Buf); // в начале и strcat(pat, tmp); strcat(pat, Buf); // в конце
// MessageBox(0, pat, " Command:", MB_ICONWARNING); // SetCurrentDirectoryA result=WinExec(pat,SW_MINIMIZE); //MINIMIZED or SW_SHOW } | | | | |
Также пришлось порешать аналогичную проблему для Professional Notepad.
Мне думается, если точно бы отследить момент, где происходит трабла с кодировкой
у сабжа с " Рабочим столом", это вполне можно было бы отследить и скорректировать
" на лету", но я никак не отслежу причину и повторяемость траблы, а в этом случае
утилиты - "следилки" выкидывают объём информации, который трудно анализировать.
Last edited by Lavr on 07 May 2011 17:41, edited 1 time in total.
|
07 May 2011 13:14 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ага, фактически я угадал, что "на лету" это происходит, т.к. в реестре символов
¦рсю¢шщ ёªюы нет. Только непонятно в какой момент портится всё...
Вот тут люди также мучаются с похожей проблемой:
CMD/BAT - Проблема с кодировками в cmd. http://forum.oszone.net/thread-57327.html
Если стоит русская винда, то возникает проблема с кодировками, переменная %DESKTOP% выглядит как "¦рсю¢шщ ёªюы". Пробовал chcp 1251, не помогает.
И судя по всему это трабла не только Вынь'98.
http://www.sql.ru/forum/actualthread.aspx?bid=3&tid=770114
но это решает только в частном случае... http://forum.oszone.net/thread-66865.html
Last edited by Lavr on 07 May 2011 18:03, edited 1 time in total.
|
07 May 2011 13:53 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
http://www.sql.ru/forum/actualthread.aspx?bid=3&tid=770114
У меня лично эта ветка реестра выглядит так:
Поменять можно, попробую, как из Инета выйду. Вопрос как проверить -
наобум запускать указанные пакеты компиляторов и JAVA....
|
07 May 2011 14:29 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Так, похоже, сдвиги есть. В файлах JAVA обращения к %DESKTOP% имеются...
Возможно, тут глюк и проходит при передаче параметра %DESKTOP% в окно ДОС.
Надо посмотреть...
Самое смешное, что отчасти эта дурная папка полезна.
C:\WINDOWS\All Users\¦рсю¢шщ ёªюы
Будучи созданной, она существует в этом виде и принимает все дурные
обращения к себе --> более ни разу не создаётся.
А непосредственно момент её создания на десктопе можно и не увидеть,
так как десктоп загорожен окнами или окном.
Поэтому Шаос и многие другие могли этого не видеть никогда.
C:\WINDOWS\All Users\ - не самое популярное место что-то искать.
Но вот когда на эту папку натыкается сам виндовоз - он сильно недоволен,
но тоже не факт, что это критично.
Непреодолимо это, если делать Виндовский Дефраг. Но Дефраг многие делают
сторонними утилитами - я, например, от Симантека. Где-то читал байку, что
Виндовский Дефраг содержит ошибку.
Похоже, функции работы с реестром не совсем корректно выполняются консольными приложениями WINDOWS.
|
07 May 2011 15:41 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Нортона 98/2К/2К1 все помнят? Если похерить строчку "COUNTRY=007,866,C:\WINDOWS\COMMAND\COUNTRY.SYS" в CONFIG.SYS, то он сносит все русские имена, заменяя их на вопросы. Так что BEWARE! Кстати, может здесь можно и 1251 задать сразу?
|
07 May 2011 21:19 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Да вывод, похоже, правильный, но дело, собственно, и не столько в нём.
Для проверки даже не пришлось писАть консольных приложений
Венды, чего я с горяча было надумал...
Опыт очень простой: скопированное название папки Рабочий стол в редакторе
транспонировано в ДОС кодировку и снова скопировано в буфер обмена.
В консольном приложении Венды создаётся папка с кривым именем:
(вверху - Folder Manager - консольное приложение, внизу - окно Проводника.
Дальше баг успешно создаётся и ведёт себя в точности как здесь ранее описано:
папка не может быть удалена, папки не существует.
Сама Венда средствами Проводника такой папки создать не даёт!!!
Венде в названии папки не нравится всего лишь первый символ.
Если скопировать название папки так, как показывает его Венда, то такую папку
запросто можно создать и всё будет корректно.
Но поскольку в консольных приложения словосочетания Рабочий стол ни в какой
кодировке нет (я специально искал - проверял), они получают его через обращение
к ключу Desktop ветви Реестра
" HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
вот тут-то, на мой взгляд, и возникает глюк с кодировкой в названии папки.
Значицца причина понятна, вопрос - как её корректно забороть...
PS. За годы работы с Вендой создал специальную папку - Боремся с WIN...
PPS. Получается что-ли, что консольные приложения Венды, коими являются и JAVA, и, собственно, сам CMD, работают в 1251, а когда что-то досовское им подсовывается, то "сжирают" некорректно?
Last edited by Lavr on 08 May 2011 06:07, edited 6 times in total.
|
08 May 2011 05:20 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Не то, чтобы не помню, а даже ни разу не сталкивался и не знаю кто такой... Серьёзно.
|
08 May 2011 05:23 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
А говоришь юзаешь дефраг от симантека. Я имел в виду Norton Utilities от Symantek.
|
08 May 2011 06:39 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Тогда знаю. По названию согрешил было на NC и клоны, а я ими и вправду
не пользовался, т.к. юзал VC и FM. Сказал бы NU - я б сразу въехал.
|
08 May 2011 07:25 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Нашел конкретно, условия появления бага. Он случается, когда из консольного
приложения Венды вызывается программа MS-DOS. Это совершенно чётко.
У меня из Folder Manager вызывал Borland C++ - bc.exe .
" Рабочими столами" запрудил весь десктоп.
Не знаю пока, от всех ли MS-DOS приложений такой эффект.
Если в пути C:\WINDOWS\All Users\¦рсю¢шщ ёªюы эту папку удалять,
она всякий раз появляется заново. Интересно, что только на десктопе.
В папке C:\WINDOWS\Рабочий стол этих клонов в этот же момент нет.
Предполагаю, что эффект вызван пользовательской политикой Венды.
Не приложение MS-DOS, а Венда лезет в пользовательскую папку
C:\WINDOWS\All Users\Рабочий стол
что-то там для себя посмотреть с кривым эффектом.
Что она там ищет - попробую выяснить вьюерами, раз уж точно знаю момент
возникновения бага.
|
08 May 2011 07:29 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Справедливо действительно при вызове ЛЮБОГО .EXE-шника но только 1 раз.
То есть, если создалась папка C:\WINDOWS\All Users\¦рсю¢шщ ёªюы
после чего - её удалить из C:\WINDOWS\All Users\
повторного эффекта не будет.
Надо выйти из консольного приложения, после чего вызвать его снова и
запустить любой .EXE-шник, баг повторится.
Написал своё консольное приложение, где по нажатию кнопки запускаю BC.EXE:
Никакого бага не происходит.
|
08 May 2011 08:38 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Утилита REGMON.EXE (Монитор реестра) показывает, что, действительно, Folder Manager
получает из реестра ключ Common Desktop в кодировке ДОС:
Может так и надо - Венда считает консольное приложение программой ДОС?
Посмотрю дальше, как этот ключ применяется...
|
08 May 2011 09:31 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22587 Location: Silicon Valley
|
А если из фара запускать?
Т.е. важно чтобы это было именно CMD?
Или оно из любого консольного приложения так чудит?
|
08 May 2011 09:31 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Мне кажется - главное - это получение "кривого" значения ключа Common Desktop.
Дальше, мне кажется, этот момент на всё и влияет. Такой папки не будет,
значит придётся её создать, откуда и вылезет:
C:\WINDOWS\All Users\¦рсю¢шщ ёªюы
Сейчас проверю обращения к файловой системой через FILEMON.EXE и посмотрю,
как повлияет смена кодировок на "cp_1250.nls"
|
08 May 2011 09:38 |
|
|
Who is online |
Users browsing this forum: No registered users and 78 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|