我的公司正在使用Sharepoint和ADFS。然而,为了使用WebDav,我们需要让用户获取一些令牌,他们只能通过打开Internet Explorer并导航到两个站点来获得。但是,他们将在大约30分钟后失去令牌,因此这必须是一个经常性的任务。
所以现在我的工作是:
我有一个最小化的最大不透明度可见false Windows窗体。 我有一个GPO,它将一个EXE文件复制到计算机上,然后创建一个定时作业,在登录后每30分钟启动它。然而,这并不真正起作用,如果用户不手动运行EXE,则仍然会遇到访问webdav的问题。此外,每当EXE运行时,用户正在使用的当前应用程序就会失去焦点,这在您输入某些内容并且必须单击回来时有点烦人。 我的当前代码看起来像这样:
然而,我认为有一种更加优雅的方法来实现这个。我听说打开隐藏的IE的唯一方法是通过
你能帮我以一种可靠的方式打开IE吗?也许你有一些关于如何设置定期任务每30分钟启动的提示(因为我认为它目前没有正确执行)。
提前感谢大家。
编辑:
感谢https://stackoverflow.com/users/5065008/daniel-waghorn,现在我已经用以下代码替换了opensite的部分:
所以现在我的工作是:
- 用IE打开2个网站
- 每30分钟
- 不要打扰用户
我有一个最小化的最大不透明度可见false 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分钟启动的提示(因为我认为它目前没有正确执行)。
提前感谢大家。
编辑:
感谢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"
可以工作... - AsharonProcessStartInfo
无法正确解析环境变量,这就是为什么它不能正常工作但与您的版本一起工作的原因。如果您想要获取用户的程序文件夹,可以使用Environment.SpecialFolder.ProgramFiles
并将其连接到您的FileName
中。 - Daniel Waghorn