| Summary: | Исправить explorer | ||
|---|---|---|---|
| Product: | WINE@Etersoft | Reporter: | Денис Баранов <baraka> | 
| Component: | Консоль ; Вызов программ | Assignee: | Виталий Перов <vitperov> | 
| Status: | CLOSED FIXED | QA Contact: | |
| Severity: | minor | ||
| Priority: | P4 | CC: | ddv, lav | 
| Version: | 1.0.9 | ||
| Target Milestone: | --- | ||
| Hardware: | PC | ||
| OS: | All | ||
| Whiteboard: | |||
| Заявки RT: | Связано с: | ||
| Дата напоминания: | |||
| Bug Depends on: | |||
| Bug Blocks: | 2088, 7398 | ||
| 
        
          Description
        
        
          Денис Баранов
        
        
        
        
          2008-09-17 22:07:11 MSD
        
       Какая бутылка? Замучился уже по бутылкам ходить. Так и не нашёл с 8.1 где есть меню "Документы". В следующий раз, пожалуйста, указывай бутылку, чтобы лишнее время не траитить Проверяй просто: $ wine explorer документ.doc и сравни с тем, что делает в этом случае explorer документ.doc в винде 1С тут ни при чём. Проверил на win2k3 При вызове explorer filename появляется диалог открыть/сохранить файл. При вызове explorer folder открывается директория. Проверил на wine: explorer без атрибутов - открывается обзор диска C: explorer c любыми атрибутами - отктывается странный пустой каталог, откуда нельзя никуда перейти с помощью встроенной функции ParseCommandLine из коммандной строки парсятся параметры. 
Выходная структура:
ypedef struct parametersTAG {
    BOOL    explorer_mode;
    WCHAR   root[MAX_PATH];
    WCHAR   selection[MAX_PATH];
} parameters_struct;
При указании параметров:
explorer_mode = 0;
root=selection=первый параметр.
есть ещё командные ключи, которые должны парсится в ParseCommandLine
Например:
 * [/n]  Opens in single-paned view for each selected items. This is default
 * [/e,] Uses Windows Explorer View
но такое ощущение, что они не парсятся.Разобрался. Параметры парсятся. Если не найдены все ключи, то вся строка параметров копируется в parameters->root В этом случае должен открываться файл/директория, которыая указана в параметрах. Если путь относительный, отктывается странный пустой каталог, откуда нельзя никуда перейти. Если путь полный, то: * При указании директории открывается эта директория * При указании файла (если путь правильный), то открывается директория, но справа виден только файл, который был указан. Остальные файлы не видны. Как я понял, такое поведение должно быть с ключом /select Вообще заметил очень странную особенность: Если указывать просто атрибуты, без ключей, то выполняется: CopyPathString(parameters->root,p2); но результат появляется не только в переменной parameters->root, но и в переменной parameters->selection Ничего не помнимаю:
Выполняю копирование функцией:
lstrcpyW(parameters->root,p2);
Но всё-равно результат появляется и в parameters->selection
Пробовал создавать parametrs динамически - ничего не изменилось.
Пробовал выводить адреса:
MODE = 0x32f9f4, ROOT = 0x32f9f8, Selection = 0x32fc00
Адреса - разные.
А проблема была в отображени информации. При вызове:
printf("MODE = %d, ROOT = %s, Selection = %s\n", parameters->explorer_mode, debugstr_w(parameters->root), debugstr_w(parameters->selection));
debugstr_w вызывается 2 раза. Притом сама функция объявлена как:
static const char *debugstr_w(LPCWSTR str)
{
   static char buf[1024];
   WideCharToMultiByte(CP_ACP, 0, str, -1, buf, sizeof(buf), NULL, NULL);
   return buf;
}
т.е буфер статический. И при повторном обращении предыдущее значение затирается.Сейчас explorer работает следующим образом: Формируется коммандная строка winefile_commandline, состоящая из полного пути и названия winefile а также аргумента, который берётся из parameters.root Дальше выполняется запуск данной комманды с помощью CreateProcess полностью заменить CreateProcess на ShellExecute не удастся, т.к она нужна для запуска эксплорера. Думаю, что надо сначала (при наличии параметров) запускать ShellExecute и смотреть на код возврата, если всё в порядке, то просто завершать программу. Если возникли какие-то проблемы, то запускать CreateProcess. Так по крайней мере не изменится поведение программы при указании неправильных путей. Багу исправил. Документы открываются. Патч отправил Сборка вышла, порверил еще раз. Все ок. Закрываю. |