Process.Start很慢

时间:2016-11-23 09:17:56

标签: c# .net outlook process.start shellexecuteex

我目前正在使用这种方法并且效果很好:

public static void CreateEmailInDefaultMailEditor(string to, string subject, string body)
{
    Process.Start($"mailto:{to}?subject={subject}&body={body}");        
}

然后我在另一台计算机上尝试了它,它也在那里工作,但它非常慢(打开我的邮件编辑器的时间超过一分钟!)。
我调试了Process.Start(在System.dll中)方法,发现问题是在NativeMethod.ShellExecuteEx方法结束时运行得很慢。

我还注意到指定了应该打开以发送电子邮件的程序的名称

public static void CreateEmailInOutlook(string to, string subject, string body)
{
    Process.Start("outlook.exe", $"mailto:{to}?subject={subject}&body={body}");        
}

解决了这个问题,但这并不能解释为什么它在计算机上正常工作而在另一个计算机上没有工作,并且它没有做同样的事情:不指定程序会自动打开默认程序。 / p>

所以问题很简单:为什么会出现这种行为以及如何解决它?

2 个答案:

答案 0 :(得分:0)

你可能不会觉得这个答案非常令人满意。

在我看来,通过shell启动mailto: URL的原始代码应优先于修改代码,该代码对特定邮件客户端进行假设。不要专门开始outlook.exe。无法保证此过程可用或可以在任何机器上找到。

关于糟糕的表现:

  

“然后我在另一台计算机上尝试过它......”

从这个单一测试中,您似乎得出结论,您的程序将在除您自己以外的大多数计算机上运行缓慢,因此您需要更改某些内容。我想说结论还为时过早。首先,测试一些其他机器。

  • 只有在您的假设得到验证后才需要更改代码(即使您没有任何可行的替代原始代码恕我直言)。
  • 但是,如果事实证明您尝试启动程序的另一台计算机比其他计算机慢,那么它可能只是配置不正确,并且解决这个问题并不是您的程序的责任。

答案 1 :(得分:0)

感谢您的回答&评价。

这里有一个小问题的更新,可能解决方案(我还不完全确定问题是什么): 我可以将问题重现给我测试的部门的每台计算机(而不仅仅是我的问题中提到的两台)。 几天后,我注意到一切都恢复了。我没有改变我的程序代码,也没有停用防病毒软件。

我在问题中没有提及(我认为这不重要),是所有计算机都是新的。我认为这可能是问题所在:Windows有一个索引服务,我可以想象,在开始时,可​​能需要几天才能扫描整台计算机。在这种情况下,搜索默认邮件管理器需要很长时间,但只要索引服务完成其工作,搜索默认邮件管理器的速度就会很快。