моя компания использует 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 минут (потому что я думаю, что она делает это неправильно).
Спасибо всем заранее.
ИЗМЕНИТЬ:
Благодаря 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);
}
Спасибо еще раз!