如何在指定的terminal会话帐户上打开Excel / Powerpoint,而不是使用最低ID的默认值?

大家好,

我有一个应用程序(Windows服务/ C#)启动EXCELPOWERPOINT,并使用系统剪贴板复制这两个应用程序之间的数据。
应用程序在多个活动terminal会话的服务器上运行。
默认情况下,Office应用程序在会话ID最低的会话中启动。

COM对象

我使用COM对象在ms-service和office应用程序之间进行通信。 下面的代码是我如何运行EXCEL的一个例子。

xlApp = new Microsoft.Office.Interop.Excel.Application(); xlWorkBook = xlApp.Workbooks.Open("path_to_my_file", 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false); 

multithreading – 并行会话

ATM应用程序正在单线程模式下运行。 我打算同时运行两个…问题是我只有1个剪贴板可用于通信目的。 为了获得另一个,我打算在2个独立的窗口会话上运行整个应用程序。 在这种情况下,我会有2个独立的单线程解决scheme。 将有2个服务的副本,运行自己的办公应用程序,我会有2个单独的剪贴板供我使用。

问题

有一件事尚未解决 – 我不知道如何强制这些办公应用程序运行在不同的用户会话。 从我所看到的情况来看,他们总是在一个身份证号码最低的sesison中跑步。

我发现了类似的问题 – 在terminal服务器上,服务如何在用户会话中启动一个进程? ,但是,运行一个进程并不像通过COM对象运行Office应用程序那样。

编辑:我注意到,如果我打开EXCEL不是从WINDOWS服务,而是从WINDOWS FROMS应用程序,EXCEL行为不同。 它不再在用户会话中以最低ID开始,而是在WINDOWS FORMS APP正在运行的相同帐户上打开。 这不知何故解决了我的问题,我将能够运行2个并行进程:)

回答:

将解决scheme从Windows Service迁移到Windows Forms应用程序,因为其默认行为是不同的。 它在当前会话上启动Excel – 应用程序正在其上运行的一个会话。