我试图通过IIS机器上部署的WCF服务从服务器端打印文件。 以下代码完美地在Win 2oo3机器上运行。但是相同的代码抛出了COM异常。对此有任何想法。我猜它与某些权限有关。 这是代码
public void Print(string htmlFilename, string printer, short copies)
{
string currDefault = string.Empty;
try
{
currDefault = GetDefaultPrinter();
myPrinters.SetDefaultPrinter(printer);
for (int i = 0; i < copies; i++)
{
documentLoaded = false;
documentPrinted = false;
InternetExplorer ie = new InternetExplorer ();
ie.DocumentComplete += new SHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(ie_DocumentComplete);
ie.PrintTemplateTeardown += new SHDocVw.DWebBrowserEvents2_PrintTemplateTeardownEventHandler(ie_PrintTemplateTeardown);
object missing = Missing.Value;
ie.Navigate(htmlFilename, ref missing, ref missing, ref missing, ref missing);
while (!documentLoaded && ie.QueryStatusWB(SHDocVw.OLECMDID.OLECMDID_PRINT) != SHDocVw.OLECMDF.OLECMDF_ENABLED)
Thread.Sleep(100);
ie.ExecWB(SHDocVw.OLECMDID.OLECMDID_PRINTPREVIEW, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, ref missing, ref missing);
ie.ExecWB(SHDocVw.OLECMDID.OLECMDID_PRINT, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, ref missing, ref missing);
while (!documentPrinted)
Thread.Sleep(100);
ie.DocumentComplete -= ie_DocumentComplete;
ie.PrintTemplateTeardown -= ie_PrintTemplateTeardown;
ie.Quit();
}
}
catch { throw; }
finally
{
myPrinters.SetDefaultPrinter(currDefault);
}
}
在为internetexplorer创建对象时,Com Exception如下所示。
[ERRORLOG]检索具有CLSID的组件的COM类工厂 {0002DF01-0000-0000-C000-000000000046}由于以下原因而失败 错误:80080005服务器执行失败(来自HRESULT的异常: 0x80080005(CO_E_SERVER_EXEC_FAILURE))。 : 在 System.RuntimeTypeHandle.CreateInstance(RuntimeType类型,布尔值 publicOnly,Boolean noCheck,Boolean&amp; canBeCached, RuntimeMethodHandleInternal&安培; ctor,布尔&amp; bNeedSecurityCheck)at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly,Boolean skipCheckThis,Boolean fillCache)at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks,Boolean skipCheckThis,Boolean fillCache)在System.Activator.CreateInstance(Type type,Boolean System.Activator.CreateInstance(Type type)中的nonPublic) [/ ERRORLOG]
此外,如果我尝试创建一个InternetExplorerMedium对象。然后它在2008年工作但不在Win server 2003中工作。我非常清楚......任何有关的帮助都会有所帮助。
此致 Pavan N
答案 0 :(得分:1)
检查2003服务器和2008服务器上安装的IE版本。 此外,由于针对不同IE版本的不同IE安装,可能需要检查其他与IE版本相关的SDK运行时等,这些运行时等不在2008机器上。例如,我有一个较旧的客户端应用程序,我必须安装DHTMLEdit ActiveX工具包,这需要一个单独的步骤,你必须在MSDN上搜索设置例程。 还要检查2003和2008服务器(用于运行WCF服务的帐户)之间的帐户和权限,并查看不同之处。很多安全设置可能在2008年收紧了。
答案 1 :(得分:0)
最后我改变了自己的逻辑。我观察到很多不同之处。特别是IE9。所有的DCOM会都会有所不同。所以名称为InternetExplorer ie = new InternetExplorer();你不能创建任何对象。它与权限或操作系统无关。它与IE版本有关。以上代码仅适用于IE8。