没有这样的界面支持意味着什么

时间:2012-03-25 21:24:52

标签: c# .net winapi

我的服务器端代码出现异常,该代码正在提供Silverlight应用程序,

  

Win32Exception - 不支持此类接口

我们的服务器端C#代码为短任务启动一个单独的进程,因为第三方dll不是线程安全的。所以上面的错误发生在像这样的部分代码中,

Process process = new Process();

ProcessStartInfo processStartInfo = new ProcessStartInfo();

processStartInfo.CreateNoWindow = true;
processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;

processStartInfo.FileName = 
    Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin", "PreviewGenerator.exe");

process.StartInfo = processStartInfo;

process.Start(); // THIS IS WHERE THE EXCEPTION OCCURS
process.WaitForExit();

PreviewGenerator.exe进程在不工作时不会启动,例外情况发生在上面的注释中。

更新:

发生问题时,我在IIS服务器上运行了进程监视器。这表明w3wp进程就是这样做的,

Thread Create
Access the file PreviewGenerator.exe
Hive unloaded (this is the registry)
Thread Exit

它在调用其他进程之前执行此操作。如果我将它与进程监视器日志进行比较,则它会执行此操作,

Thread Create
Access the file PreviewGenerator.exe
Process Start
Does heaps of stuff with PreviewGenerator.exe including reading / writing / registry, etc.
Process Exit
Hive unloaded
Thread Exit

但是,流程监控器没有显示第一个案例无法解决的原因。

有没有办法可以看出为什么线程会过早退出?

此外,我认为这个问题与我的服务器被加载的时间有关,并且正在使用更多的内存。我该如何证明这一点?

2 个答案:

答案 0 :(得分:2)

我有一个类似的问题,我用过 processStartInfo.UseShellExecute = false; 并为我修好了。

http://www.progtown.com/topic31343-process-start-processstartinfo-startinfo.html

答案 1 :(得分:1)

我发现最好的办法是在IIS中为我的应用程序创建一个单独的应用程序池,并设置它可以使用的RAM量的上限。此外,我发现打开应用程序池设置下的“生成回收事件日志条目”项非常有用。

然后,您可以转到系统事件日志,并使用“WAS”源过滤掉项目,以了解应用程序池中的内容,重新启动时以及停止等待时等等。

我认为我们的主要问题是IIS框内存不足。调整应用程序池并添加一些额外的RAM似乎已经解决了它。