моя компания использует Sharepoint и ADFS. Однако для использования WebDav нам нужны пользователи, чтобы получить некоторые токены, которые они получают, открыв Internet Explorer и перейдя на два сайта. Однако они теряют токен каждые ~ 30 минут, поэтому он должен быть повторяющейся задачей.Начать скрытый Internet Explorer
Так что теперь моя работа заключается в следующем:
- Open 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).
Благодарим вас заблаговременно.
EDIT:
Благодаря https://stackoverflow.com/users/5065008/daniel-waghorn я теперь заменили opensite бит с:
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);
}
Еще раз спасибо!
Это своего рода то, что я искал, однако я все еще сталкиваюсь с проблемами 'startInfo.FileName = @"% ProgramFiles% \ Internet Explorer \ iexplore.exe "; ' Он делает это ' '% ProgramFiles% \\ Internet Explorer \\ iexplore.exe" ' Но он не может найти файл. Хотя '@" C: \ Program Files \ Internet Explorer \ iexplore.exe "' works ... – Asharon
Извините, похоже, что 'ProcessStartInfo' не анализирует переменные среды правильно, поэтому почему это не работает но работает с вашей версией. Вы можете использовать 'Environment.SpecialFolder.ProgramFiles' и объединить его в свое' FileName', чтобы получить папку Program Files пользователя, если хотите. –
'private void openProc (строка сайта) { ProcessStartInfo startInfo = new ProcessStartInfo(); string ProgramFiles = Environment.GetFolderPath (Environment.SpecialFolder.ProgramFiles); startInfo.FileName = ProgramFiles + @ "\ Internet Explorer \ iexplore.exe"; startInfo.Arguments = "" + сайт + ""; startInfo.CreateNoWindow = true; startInfo.ErrorDialog = false; startInfo.WindowStyle = ProcessWindowStyle.Hidden; Process.Start (startInfo); } ' Работает как очарование, еще раз спасибо! – Asharon