У меня работает служба, и мне нужно, чтобы она написала повар ie для IE. Прочитав API Win32, кажется, что функции InternetSetCookieEx и InternetGetCookieEx должны выполняться под пользовательским процессом. Поэтому я олицетворяю желаемого пользователя, а затем вызываю эти функции.
Олицетворение пользователя работает нормально (используя его в другом месте без проблем) и подтвердил, что до вызова функции InternetSetCookieEx он олицетворял правильного пользователя, однако он возвращает false, и я не вижу повара ie.
Ниже приведен код для материала ie повара. Есть ли проблема с приведенным ниже кодом или это связано с тем, что он работает как служба, олицетворяющая пользователя?
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern bool InternetSetCookieEx(string lpszUrlName, string lpszCookieName, string lpszCookieData, uint dwFlags, IntPtr dwReserved);
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, ref uint pcchCookieData, uint dwFlags, IntPtr lpReserved);
public static bool SetIECookie(string url, string cookie)
{
return InternetSetCookieEx(url, null, cookie, HTTP_ONLY, IntPtr.Zero);
}
public static bool DoesIECookieExist(string url, string value)
{
uint datasize = 2048;
StringBuilder cookieData = new StringBuilder(Convert.ToInt32(datasize));
if (!InternetGetCookieEx(url, null, cookieData, ref datasize, HTTP_ONLY, IntPtr.Zero))
{
if (datasize < 0)
{
return false;
}
cookieData = new StringBuilder(Convert.ToInt32(datasize));
if (!InternetGetCookieEx(url, null, cookieData, ref datasize, HTTP_ONLY, IntPtr.Zero))
{
return false;
}
}
return cookieData.ToString().Contains(value);
}
Обновление: получение кода ошибки 259 от GetLastError (), хотя повар ie обязательно присутствует