2013-06-13 1 views
0

Je pourrais jurer à Dieu que le code ci-dessous utilisé pour fonctionner il ya une semaine. Je peux le dire parce que le logiciel que je développe en dépend.Comportement inattendu lors de l'ouverture du fichier échappé: /// URL dans IE

Ce morceau de code est censé ouvrir une page html à partir d'un disque dur local en utilisant IE:

(Ces chaînes ne sont pas codés en dur dans mon exemple concret Ce qu'il fait est ce - il échappe le chemin vers le local. fichier html et ajoute file: /// devant)

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); 

Mais ce que je reçois quand je teste aujourd'hui est juste la page d'accueil dans Internet Explorer..

Une idée de ce qui ne va pas ici?

PS. Le fichier Report_View.htm existe dans le système de fichiers. PS2. Si je copie et colle l'URL échappée dans Chrome ou FF, il s'ouvre très bien.

+0

« * le code ci-dessous utilisé pour travailler il y a une semaine * » Alors 'diff' avec votre version précédente (vous utilisez un logiciel de contrôle de version, * right *?). – syam

+0

@syam: Il n'y a pas de 'diff' - il n'a pas été changé du tout. – ahmd0

Répondre

0

Aussi je ne suis pas sûr que le paramètre devrait être cité en soi (il n'a pas de caractères d'espace de toute façon), également pas sûr de l'échappement.

Essayez:

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

Il est censé être 3 barres obliques: http://msdn.microsoft.com/en-us/library/aa767731(v=vs.85).aspx et les guillemets ne devraient pas faire de différence. – ahmd0

+0

Mon mauvais. Êtes-vous sûr de l'évasion? (Édité ma réponse) – Yamodax

+0

Eh bien, la seule chose que je n'ai pas faite est de remplacer: avec |, mais cela ne fait aucune différence. En s'échappant, cela ne devrait pas faire de différence, mais c'est le cas. Si j'enlève d'échapper, ça marche. Avec ça, ça ne l'est pas. Encore une fois, le même code exact a fonctionné il y a une semaine. Est-ce que c'est une de ces mises à jour de MS qui a chamboulé quelque chose? – ahmd0

1

Eh bien, évidemment, ils ont fait quelques modifications à l'IE et maintenant l'URL du protocole de fichier ne peut contenir plus Escaping arbitraire. D'après mon expérience, la seule façon de le faire fonctionner avec IE est en obtenant le chemin du protocole de fichier en appelant l'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); 
} 
Questions connexes