我的公司正在使用Sharepoint和ADFS。但是,对于WebDav的使用,我们需要用户获得一些令牌,这些令牌只能通过打开Internet Explorer并导航到两个站点来获得。但是,他们每隔30分钟就会丢失令牌,因此这必须是重复执行的任务。
所以现在我的工作是:
我当前的解决方案是“ kinda”工作,但我对此并不满意。我只有VSExpress,所以没有服务。
我有一个最小化的最大不透明可见的错误Windows窗体。我有一个GPO,它将一个EXE文件复制到计算机,然后创建一个定时作业,该作业在登录后每30分钟启动一次。但是,它还没有真正解决,如果人们不手动运行EXE,则仍然很难访问webdav。同样,每当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不能正确执行)。
谢谢大家。
编辑:
多亏了https://stackoverflow.com/users/5065008/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);
}
再次感谢!
您可以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
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句