Windows wininet.InternetOpenUrlA错误\u SXS\u激活\u上下文\u已禁用

Windows wininet.InternetOpenUrlA错误\u SXS\u激活\u上下文\u已禁用,windows,compilation,Windows,Compilation,我有这个计划: #include <string> #include <iostream> #include <fstream> #include <windows.h> #include <wininet.h> #include <winsock.h> #include <stdio.h> #include <stdarg.h> using namespace std; int main()

我有这个计划:

#include <string>
#include <iostream>
#include <fstream>
#include <windows.h>
#include <wininet.h>
#include <winsock.h>
#include <stdio.h>
#include <stdarg.h>

using namespace std;

int main()      
{
HINTERNET hOpen, hURL;
LPCTSTR NameProgram = "UA";             //      LPCWSTR == Long Pointer to Const Wide String 
LPCTSTR Website;                    
char file[101];
unsigned long read;

//Always need to establish the internet connection with this funcion.  
  if ( !(hOpen = InternetOpen(NameProgram, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0 )))
    {
    cerr << "Error in opening internet" << endl;
    return 0;
    }                       
Website = "www.c-jump.com";
hURL = InternetOpenUrl( hOpen, Website, NULL, 0, 0, 0 );            //Need to open the URL


InternetReadFile(hURL, file, 100, &read);
while (read == 100)
    {
    InternetReadFile(hURL, file, 100, &read);
    file[read] = '\0';
    cout << file;
    }

cout << endl;
InternetCloseHandle(hURL);
return 0;
}
我运行exe并没有得到任何输出,我希望URL的HTML响应打印到标准输出。我在调试器中运行代码,在InternetOpenUrlA函数返回时返回以下错误:

ERROR_SXS_ACTIVATION_CONTEXT_DISABLED (00002EE6)
我在Windows10上运行Windows

有人能解释一下这意味着什么以及如何解决这个问题吗?昨天早些时候,我有同样的代码在工作,但突然它停止了工作,中间安装了一些Windows更新

非常感谢


Charlie

由于您的URL没有方案/协议,错误可能是错误的INTERNET方案无法识别。只需修复URL:
网站=”http://www.c-jump.com";你的读取循环也有问题,你扔掉了前100个字节!也不能保证它每次可以读取100字节

您还可以尝试修复URL:

DWORD DumpResponse(const char *URL)
{
    LPCSTR agent = "Stackoverflow Example";
    DWORD error, read;
    HINTERNET hInet, hConn;
    char data[101], urlbuf[INTERNET_MAX_URL_LENGTH];

    const char *defscheme = "http";
    URL_COMPONENTSA uc;
    ZeroMemory(&uc, sizeof(uc));
    uc.dwStructSize = sizeof(uc);
    BOOL crack = InternetCrackUrlA(URL, 0, 0, &uc);
    error = GetLastError();
    printf("DBG: InternetCrackUrlA error %d\n", crack ? 0 : error);
    if (!crack && error == ERROR_INTERNET_UNRECOGNIZED_SCHEME && strlen(defscheme) + 3 + strlen(URL) < INTERNET_MAX_URL_LENGTH)
    {
        // Prepend a protocol
        sprintf(urlbuf, "%s://%s", defscheme, URL);
        URL = urlbuf;
    }
    else if (!crack)
    {
        return error;
    }

    hInet = InternetOpenA(agent, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
    if (!hInet) return GetLastError();

    hConn = InternetOpenUrlA(hInet, URL, NULL, 0, 0, 0); 
    error = GetLastError();
    if (!hConn)
    {
        InternetCloseHandle(hInet);
        printf("DBG: InternetOpenUrl failed with error %d\n", error);
        return error;
    }

    error = 0;
    for (;;)
    {
        if (!InternetReadFile(hConn, data, sizeof(data) - 1, &read))
        {
            error = GetLastError();
            break;
        }
        if (0 == read) break; // Done
        data[read] = '\0';
        printf("%s", data);
    }

    InternetCloseHandle(hInet);
    InternetCloseHandle(hConn);
    return error;
}



int main()
{
    printf("----\nDumpResponse returned %d\n", DumpResponse("www.c-jump.com"));
}
DWORD DumpResponse(const char*URL)
{
LPCSTR agent=“Stackoverflow示例”;
DWORD错误,读取;
HINTERNET hInet,hConn;
字符数据[101],urlbuf[互联网最大URL长度];
const char*defscheme=“http”;
URL_组件a uc;
零内存(&uc,sizeof(uc));
uc.dwStructSize=sizeof(uc);
BOOL crack=InternetCrackUrlA(URL、0、0和uc);
error=GetLastError();
printf(“DBG:InternetCrackUrlA错误%d\n”,crack?0:错误);
如果(!crack&&error==error\u INTERNET\u UNRECOGNIZED\u SCHEME&&strlen(defscheme)+3+strlen(URL)
DWORD DumpResponse(const char *URL)
{
    LPCSTR agent = "Stackoverflow Example";
    DWORD error, read;
    HINTERNET hInet, hConn;
    char data[101], urlbuf[INTERNET_MAX_URL_LENGTH];

    const char *defscheme = "http";
    URL_COMPONENTSA uc;
    ZeroMemory(&uc, sizeof(uc));
    uc.dwStructSize = sizeof(uc);
    BOOL crack = InternetCrackUrlA(URL, 0, 0, &uc);
    error = GetLastError();
    printf("DBG: InternetCrackUrlA error %d\n", crack ? 0 : error);
    if (!crack && error == ERROR_INTERNET_UNRECOGNIZED_SCHEME && strlen(defscheme) + 3 + strlen(URL) < INTERNET_MAX_URL_LENGTH)
    {
        // Prepend a protocol
        sprintf(urlbuf, "%s://%s", defscheme, URL);
        URL = urlbuf;
    }
    else if (!crack)
    {
        return error;
    }

    hInet = InternetOpenA(agent, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
    if (!hInet) return GetLastError();

    hConn = InternetOpenUrlA(hInet, URL, NULL, 0, 0, 0); 
    error = GetLastError();
    if (!hConn)
    {
        InternetCloseHandle(hInet);
        printf("DBG: InternetOpenUrl failed with error %d\n", error);
        return error;
    }

    error = 0;
    for (;;)
    {
        if (!InternetReadFile(hConn, data, sizeof(data) - 1, &read))
        {
            error = GetLastError();
            break;
        }
        if (0 == read) break; // Done
        data[read] = '\0';
        printf("%s", data);
    }

    InternetCloseHandle(hInet);
    InternetCloseHandle(hConn);
    return error;
}



int main()
{
    printf("----\nDumpResponse returned %d\n", DumpResponse("www.c-jump.com"));
}