下面这种写法在C# WINDOWS窗体程序中可以通过,即WINFORM中可以,但在ASP.NET就会报异常
-----------------------------------------------------------------
Microsoft.Office.Interop.Word.ApplicationClass wordApp = null;
try
{
wordApp = Marshal.GetActiveObject( "Word.Application" ) as Microsoft.Office.Interop.Word.ApplicationClass;
}
-----------------------------------------------------------------
我在国外一个论坛里搜索一个帖子和我的问题差不多,帖子的地址如下:
http://www.developmentnow.com/g/16_2005_1_0_0_47728/Marshal-GetActiveObject-throws-an-exception-in-a-C-webservice-but.htm
里面有位老大好像说出了其中的原因(如下),但该帖好像最终也没有给出解决的方法,所以我就郁闷了。。。。。:(
-------------------------------------------------------
Hello,
Based on my research, GetActiveObject obtains a running instance of an
object from the running object table (ROT). Each WinStation has it's own
ROT. The interactive desktop is one WinStation and has it's own ROT and
that is where the desktop application will have registered the running
object. The ASP.NET process is running under a seperate account and exists
in a non-interactive WinStation with its own ROT. That is why it fails.
I think the only way for this to work would be to launch the third party
application process from ASP.NET so it exists in the same WinStation. Of
course the application will then not be visible and the user cannot
interact with it.
-------------------------------------------------------
请各位CSDN的大侠相助,小弟不胜感激!
另外,我们的项目需求必须“是在ASP.NET的网页中去得到当前运行的word的实例,而不是自己去new一个,new一个我们可以使用Activator.CreateInstance()成功实现了,但是Get一个当前已经运行的对象就不行”。
------解决方案--------------------------------------------------------
没看明白英文的意思。。。
反射的实例没问题,可能方法没有,
你单步调试试试。。
------解决方案--------------------------------------------------------
Asp.NET中也可以。
在ASP.NET中使用Microsoft Word文档
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
看看下面的写法, 如果有活动对象getObject,否则new:
Microsoft.Office.Interop.Excel.Application ap;
try
{
ap =(Microsoft.Office.Interop.Excel.Application)
Microsoft.VisualBasic.Interaction.GetObject(null, "Excel.Application");
}
catch
{
ap = new Microsoft.Office.Interop.Excel.Application();
}
------解决方案--------------------------------------------------------
1.确定服务器上有word
2.确定当前已经有了活动实例
3.确定asp.net启动账户与word启动账户相同