Запустите скрытый Internet Explorer

Моя компания использует Sharepoint и ADFS. Однако для использования WebDav нам нужно, чтобы пользователи получили некоторые токены, которые они получают только после открытия Internet Explorer и перехода на два сайта. Однако они будут терять токен каждые ~30 минут, поэтому это должно быть повторяющимся заданием.

Так что теперь моя работа состоит в том, чтобы:

  • Откройте 2 сайта с IE
  • Каждые 30 минут
  • Не раздражать пользователя

Мое текущее решение "своего рода" работает, но я не очень доволен им. У меня есть только VSExpress, поэтому никаких услуг.

У меня свёрнута максимальная непрозрачность, видимая ложная форма Windows. У меня есть объект групповой политики, который копирует EXE-файл на компьютер, а затем создает синхронизированное задание, которое запускается каждые 30 минут после входа в систему. Однако на самом деле это не работает, люди по-прежнему имеют проблемы с доступом к webdav, если они не запускают EXE вручную. Кроме того, всякий раз, когда EXE запускает текущее приложение, в котором работает пользователь, он теряет фокус, что немного раздражает, когда вы что-то печатаете и вынуждены нажимать обратно. Мой текущий код выглядит так:

    private void Form1_Load(object sender, EventArgs e)
    {
        MainMethod();
    }
    private void MainMethod()
    {
        RegistryKey root = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Classes\InternetExplorer.ApplicationMedium\CLSID", false);
        if (root!=null)
        { 
            opensite();
            Application.Exit();
        }
    }
    private void opensite()
    {
        try
        {
            SHDocVw.InternetExplorer _ie1 = (SHDocVw.InternetExplorer)Activator.CreateInstance(Type.GetTypeFromProgID("InternetExplorer.ApplicationMedium"));
            SHDocVw.InternetExplorer _ie2 = (SHDocVw.InternetExplorer)Activator.CreateInstance(Type.GetTypeFromProgID("InternetExplorer.ApplicationMedium"));
            _ie1.Visible = false;
            _ie2.Visible = false;
            _ie1.Navigate("SITENAME1.html");
            _ie2.Navigate("SITENAME2.html");
            System.Threading.Thread.Sleep(10000);
            _ie1.Quit();
            _ie2.Quit();
        }
        catch(Exception e)
        {
        }
    }

Тем не менее, я чувствую, что есть гораздо более элегантный способ сделать это. Я слышал, что единственный способ открыть скрытый IE - через

(SHDocVw.InternetExplorer)Activator.CreateInstance(Type.GetTypeFromProgID("InternetExplorer.ApplicationMedium"));

Но при этом я полагаюсь на ключ реестра, который есть не у всех клиентов.

Можете ли вы помочь мне открыть IE надежным способом и, возможно, дать несколько советов о том, как настроить повторяющуюся задачу так, чтобы она запускалась каждые 30 минут (потому что я думаю, что это не совсем правильно, atm).

Спасибо всем заранее.

РЕДАКТИРОВАТЬ:

Благодаря Daniel Waghorn я теперь заменил бит с открытым сайтом на:

private void Form1_Load(object sender, EventArgs e)
    {
        MainMethod();
    }
    private void MainMethod()
    {
        openProc("SITE1.html");
        openProc("SITE2.html");
        Application.Exit();
    }

    private void openProc(string site)
    {
        ProcessStartInfo startInfo = new ProcessStartInfo();
        string ProgramFiles = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
        startInfo.FileName = ProgramFiles + @"\Internet Explorer\iexplore.exe";
        startInfo.Arguments = "" + site + "";
        startInfo.CreateNoWindow = true;
        startInfo.ErrorDialog = false;
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        Process.Start(startInfo);
    }

Еще раз спасибо!

2 ответа

Решение

Ты можешь использовать ProcessStartInfo создать новый экземпляр IE:

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = ""C:\Program Files\Internet Explorer\iexplore.exe"";
startInfo.Arguments = "" + url + "";
startInfo.CreateNoWindow = true;
startInfo.ErrorDialog = false;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(startInfo);

Вы могли бы использовать Environment.SpecialFolder.ProgramFiles чтобы получить путь к каталогу Program Files пользователя, если вы не хотите его жестко кодировать.

Я должен указать, что startInfo.WindowStyle запустит Internet Explorer скрытым, хотя, если в какой-то момент IE решит изменить это значение по любой причине, которую оно может показать

В идеале, если вы не привязаны к использованию Internet Explorer для получения токенов, другой альтернативой может быть использование приведенного выше кода, но целевой cURL или что-то подобное. При этом он будет работать в командной строке, которую вы можете гарантировать, чтобы не показывать или красть фокус с startInfo.CreateNoWindow,

Другие вопросы по тегам