0

我可以向上帝发誓,下面的代码在一周前曾经可以工作。我可以这么说,因为我开发的软件依赖于它。

此代码块应该使用 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。如果我将转义的 URL 复制并粘贴到 Chrome 或 FF 中,它就可以正常打开。

4

2 回答 2

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);
}
于 2013-06-14T17:07:51.193 回答
0

另外我不确定参数本身是否应该被引用(它无论如何都没有空格字符),也不确定转义。

尝试:

LPCTSTR addr2 = L"file:///C|/Users/UserName/AppData/Local/Temp/Report_View.htm";
于 2013-06-13T22:07:12.873 回答