大家好,我的手上有点挠头。以下代码在我的服务器上运行,并且可以按预期工作。
public void RenderWithData(string strcaseno, string strdocpath, string strdocsp, string stramnt)
{
Microsoft.Office.Interop.Word.Application appWord = new Microsoft.Office.Interop.Word.Application[];
string suffix = Convert.ToString(DateTime.Now.Minute + DateTime.Now.Millisecond);
string sourceFileName = System.Web.HttpContext.Current.Server.MapPath(strdocpath);
string destFileName = System.Web.HttpContext.Current.Server.MapPath("~/Cache/" + ActiveLogin.Login + Session.SessionID.ToString + suffix + ".doc");
Word.Document docDepetal = new Word.Document();
FileInfo objFileInfo = default(FileInfo);
try {
File.Copy(sourceFileName, destFileName);
SqlSingleQuery cmd = new SqlSingleQuery(strdocsp);
cmd.AddInt("@USERID", ActiveLogin.UserID);
string ParameterName = "value0";
cmd.AddVarChar(ParameterName, 50, strcaseno);
cmd.AddMoney("@NEWCONSENT", stramnt);
cmd.Execute();
docDepetal = appWord.Documents.Open(destFileName);
Word.Bookmarks MyBookMarks = docDepetal.Bookmarks();
foreach (string bookmark in cmd.Columns.Keys) {
MyBookMarks.Item(bookmark).Range.Text = cmd.Columns.Item(bookmark).ToString();
}
docDepetal.Protect(Word.WdProtectionType.wdAllowOnlyComments, false, "password");
docDepetal.Save();
docDepetal.Close();
appWord.Quit();
Marshal.FinalReleaseComObject(appWord);
appWord = null;
objFileInfo = new FileInfo(destFileName);
DisplayDownloadDialog(objFileInfo);
} catch (Exception ex) {
ShowErrorMsg(ex.Message);
} finally {
if (appWord != null) {
if (docDepetal != null) {
docDepetal.Close();
}
appWord.Quit();
Marshal.FinalReleaseComObject(appWord);
}
if (File.Exists(destFileName)) {
File.Delete(destFileName);
}
}
}
现在我的问题是偶尔winword.exe进程不会在服务器上关闭,之后打开的所有其他winword.exe进程也不会关闭。然后,这会导致“由于以下错误,从 iclassfactory 创建具有 clsid {00020906-0000-0000-c000-000000000046} 的 com 组件实例失败:8001010a。” 每次发送新请求以创建文档时显示的错误。
我想知道我是否可以在这段代码中做一些不同的事情来解决这个问题。
请记住,正在创建的文档是在运行时填充的模板,不需要在服务器上进行任何交互。
非常感谢您的任何帮助,并在此先感谢您。