+++ Данная задача создана размножением задачи 2465 +++ В 1С81 можно открывать вложеные файлы (например *.doc). > trace:process:CreateProcessW app (null) cmdline L"explorer > C:\\windows\\temp\\123g.doc" > Просто бага воспроизводится при помощи: $ wine explorer документ.doc ------------------------------------------- Откатил патч: commit 33206ccfdf6ebaedc7555aa13b5bee0188e59199 Author: Vitaly Perov <vitperov@etersoft.ru> Date: Sun Dec 13 01:54:18 2009 +0300 fix eterbug #2465: explorer can't open *.doc files Для начала надо проверить воспроизводится ли бага. Патч точно должнен быть в eterwine после версии 1.3.23
Проверил. Бага воспроизводится
Новые изменения в winehq вызваны патчем: commit f2ac486e21c64b664dea527e2621e3c1d830c2cc Author: Jay Yang <jkelleyy@gmail.com> Date: Sat Jun 11 17:42:17 2011 -0400 explorer: Implement the explorer using IExplorerBrowser. Там больше не используется CreateProcessW, вместо этого окно обозревателя создаётся прямо в программе. Пока не нашёл на каком этапе можно проверить передаваемые параметры и выполнить открытие файла.
Сейчас поддерживается открытие эксплорером только заданной директории. Директория берётся из параметров коммандной строки. На основе её создаётся класс IShellFolder. Класс может хранить только параметры директории. Если ещё класс IShellItem, он может быть связан с конкретным файлом или директорией. Нужно проверить, поддерживает ли этот класс IExplorerBrowser. Если да, то можно сделать вполне корректный патч
Сделал... не работает. Нормального патча видимо не получится, придётся делать хак. На всякий случай выкладываю свои наработки (вдруг в будущем пригодится). SetWindowLongPtrW(window,EXPLORER_INFO_INDEX,(LONG_PTR)info); static void make_explorer_window(IShellFolder* startFolder, WCHAR* pathW) ret = IShellFolder_ParseDisplayName(startFolder, NULL, NULL, pathW, NULL, &pidl_testfile, NULL); WINE_FIXME("ParseDisplayName returned %x\n", ret); //ret = pSHCreateShellItem(pidl_cwd, NULL, pidl_testfile, &shellitem); ret = SHCreateShellItem(NULL, NULL, pidl_testfile, &shellitem); WINE_FIXME( "SHCreateShellItem returned %x\n", ret); //ret = IExplorerBrowser_BrowseToObject(info->browser,(IUnknown*)shellitem, SBSP_ABSOLUTE); ret = IExplorerBrowser_BrowseToIDList(info->browser,pidl_testfile, SBSP_ABSOLUTE); WINE_FIXME( "ExplorerBrowser_BrowseToObject %x\n", ret); ShowWindow(window,SW_SHOWDEFAULT); UpdateWindow(window);
Сделал патч, отправил в рассылку.
Патч приложен. Всё должно работать
Отправил письмо с текущей реализацией в wine-devel@winehq.org. Возможно кто-нибудь подскажет правильную реализацию