La mia azienda utilizza SharePoint e ADFS. Per l'utilizzo di WebDav, tuttavia, è necessario che gli utenti ottengano alcuni token che ottengono solo aprendo Internet Explorer e navigando verso due siti. Tuttavia, perderanno il token ogni ~ 30 minuti, quindi deve essere un compito ricorrente.Avvia Internet Explorer nascosto
Così ora il mio lavoro è quello di:
- Aperte 2 siti web con IE
- ogni 30 minuti
- Non infastidire l'utente
La mia soluzione attuale è "un pò" lavorando ma non ne sono veramente soddisfatto. Ho solo VSExpress quindi nessun servizio.
Ho una falsa opaca minima visibile falsa Windows Form. Ho un oggetto Criteri di gruppo che copia un file EXE sul computer e quindi crea un lavoro a tempo che lo avvia ogni 30 minuti dopo il login. Tuttavia non sta funzionando, le persone hanno ancora problemi ad accedere a webdav se non eseguono manualmente l'EXE. . Inoltre ogni volta che il file EXE è in esecuzione l'applicazione corrente l'utente sta lavorando in perde il fuoco che è un pò fastidioso quando si sta digitando qualcosa e cliccare indietro nel mio codice attuale sta cercando in questo modo:
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)
{
}
}
Tuttavia, Sento che c'è un modo molto più elegante per farlo. Ho sentito l'unico modo per aprire un IE nascosto è via
(SHDocVw.InternetExplorer)Activator.CreateInstance(Type.GetTypeFromProgID("InternetExplorer.ApplicationMedium"));
Ma con questo mi baso sulla chiave di registro che non tutti i clienti hanno.
Puoi aiutarmi ad aprire l'IE in modo affidabile e magari avere qualche suggerimento su come dovrei impostare l'attività ricorrente per iniziare ogni 30 minuti (perché penso che non stia facendo correttamente atm).
Grazie a tutti in anticipo.
EDIT:
Grazie a https://stackoverflow.com/users/5065008/daniel-waghorn io ora sostituito il bit opensite con:
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);
}
Grazie ancora!
Questo è un po 'quello che stavo cercando, tuttavia ho ancora dei problemi 'startInfo.FileName = @"% ProgramFiles% \ Internet Explorer \ iexplore.exe "; ' Lo sta creando a ' "% ProgramFiles% \\ Internet Explorer \\ iexplore.exe" ' Ma non riesce a trovare il file. Anche se '@" C: \ Programmi \ Internet Explorer \ iexplore.exe "' funziona ... – Asharon
Spiacente sembra che 'ProcessStartInfo' non analizzi correttamente le variabili di ambiente quindi perché non funziona ma funziona con la tua versione. Puoi usare 'Environment.SpecialFolder.ProgramFiles' e concatenarlo nel tuo' NomeFile' per ottenere la cartella Programmi dell'utente, se lo desideri. –
'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 = "" + sito + ""; startInfo.CreateNoWindow = true; startInfo.ErrorDialog = falso; startInfo.WindowStyle = ProcessWindowStyle.Hidden; Process.Start (startInfo); } Funziona come un incantesimo, grazie ancora! – Asharon