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

本文关键字:默认 ID Powerpoint 会话 终端 Excel | 更新日期: 2023-09-27 18:27:41

Hi-All,

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

COM对象

我使用COM对象在ms服务和办公应用程序之间进行通信。以下代码是我如何运行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);

多线程-并行会话

ATM应用程序在单线程模式下运行。我计划同时进行两次威胁。。。问题是,我只有1个剪贴板可用于通信目的。为了获得另一个,我计划在两个独立的windows会话上运行整个应用程序。在这种情况下,我会有两个单独的单线程解决方案。该服务将有两份副本,运行他们自己的办公应用程序,我将有两个单独的剪贴板供我使用。

问题

有一件事仍未解决——我不知道如何强制这些办公应用程序在不同的用户会话上运行。据我所见,他们总是以最低ID运行。

我发现了类似的问题-在终端服务器上,服务如何在用户中启动进程';s会话,然而,运行进程与通过COM对象运行office应用程序不同。

编辑:我注意到,如果我不是从WINDOWS SERVICE而是从WINDOWS FROMS APPLICATION打开EXCEL,EXCEL的行为会有所不同。它不再在ID最低的用户会话下启动,而是在运行WINDOWS FORMS应用程序的同一帐户上打开自己。这以某种方式解决了我的问题,我将能够运行2个并行进程:)

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

答案:

将解决方案从Windows服务迁移到Windows窗体应用程序,因为其默认行为不同。它在当前会话上启动Excel,即应用程序本身正在运行的会话。