我可以向上帝发誓,下面的代码曾经在一周前工作过。我可以说,因为我开发的软件取决于它。
此代码块应该使用IE从本地HDD打开html页面:
(这些字符串在我的实际例子中没有硬编码。它的作用是什么 - 它转移到本地html文件的路径并在前面添加file:///。)
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。如果我将转发的网址复制并粘贴到Chrome或FF中,它就会正常打开。
答案 0 :(得分:1)
嗯,显然他们对IE进行了一些更改,现在文件协议URL不再包含任意转义。根据我的经验,使其适用于IE的唯一方法是通过调用UrlCreateFromPath API来获取文件协议路径:
//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);
}
答案 1 :(得分:0)
此外,我不确定参数是否应该引用(无论如何都没有空格字符),也不确定转义。
尝试:
LPCTSTR addr2 = L"file:///C|/Users/UserName/AppData/Local/Temp/Report_View.htm";