2013-06-13 48 views
0

Я могу поклясться, что приведенный ниже код работает неделю назад. Я могу сказать, что, поскольку программное обеспечение, которое я разрабатываю, зависит от него.Неожиданное поведение при открытии экранированного файла: /// URL-адрес в IE

Этот код кусок должен открыть HTML-страницу с локального жесткого диска с помощью IE:

(Эти строки не зашиты в моем конкретном примере, что он делает это - она ​​сбегает путь к локальному. HTML-файл и добавляет файл: /// спереди)

LPCTSTR m_strBrowser = L"C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe"; 
LPCTSTR addr2 = L"\"file:///C%3a%5cUsers%5cUserName%5cAppData%5cLocal%5cTemp%5cReport_View.htm\""; 

ShellExecute(hMain, NULL, m_strBrowser, addr2, NULL, SW_SHOWNORMAL); 

Но то, что я получаю, когда я проверить его сегодня только домашняя страница в IE..

Любая идея, что здесь не так?

PS. Файл Report_View.htm существует в файловой системе. PS2. Если я копирую и вставляю экранированный URL в Chrome или FF, он открывается просто отлично.

+0

«* ниже код используется для работы неделю назад *» Тогда 'diff' с ваша предыдущая версия (вы используете программное обеспечение для управления версиями, * right *?). – syam

+0

@syam: Нет «diff» - он совсем не изменился. – ahmd0

ответ

0

Также я не уверен, что параметр должен быть процитирован сам по себе (в любом случае, он не имеет символов пробела), также не уверен в возможности экранирования.

Try:

LPCTSTR addr2 = L"file:///C|/Users/UserName/AppData/Local/Temp/Report_View.htm"; 
+0

Предполагается, что это три слэша: http://msdn.microsoft.com/en-us/library/aa767731(v=vs.85).aspx и цитаты не должны иметь значения. – ahmd0

+0

Мой плохой. Вы уверены в побеге? (Изменен мой ответ) – Yamodax

+0

Ну, единственное, чего я не делал, это заменить: с |, но это все равно не имеет никакого значения. Поскольку побег идет, это не должно иметь никакого значения, но это так. Если я удаляю экранирование, он работает. С ним это не так. Опять же, тот же самый точный код работал неделю назад. Это одна из тех обновлений MS, которая что-то испортила? – ahmd0

1

Ну, по-видимому, они внесли некоторые изменения в IE и теперь URL протокола файл больше не может содержать произвольное вытекание. Из моего опыта, единственный способ, чтобы заставить его работать с IE является получение путь протокола файла с помощью вызова API UrlCreateFromPath:

//You get this path from Registry 
LPCTSTR m_strBrowser = L"C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe"; 

LPCTSTR addr2 = L"C:\\Users\\UserName\\AppData\\Local\\Temp\\Report_View.htm"; 

DWORD dwSz_buff_addr2 = INTERNET_MAX_URL_LENGTH; 
TCHAR buff_addr2[INTERNET_MAX_URL_LENGTH]; 
if(SUCCEEDED(UrlCreateFromPath(addr2, buff_addr2, &dwSz_buff_addr2, NULL)) 
{ 
    ShellExecute(hMain, NULL, m_strBrowser, buff_addr2, NULL, SW_SHOWNORMAL); 
} 
Смежные вопросы