こんにちはすべて、デフォルトのIDではなく、指定されたターミナルセッションアカウントでExcel/Powerpointを開く方法は?
私はシステムクリップボードを使用して、これらの2つのアプリケーション間のデータをEXCELとPOWERPOINTを起動し、コピーするアプリケーション(Windowsサービス/ C#)を持っています。
アプリケーションは、複数のアクティブなターミナルセッションを持つサーバー上で実行されます。
デフォルトでは、Officeアプリは最低のセッションIDでセッションを開始します。
COMは、私は、MS-サービスとオフィスアプリケーション間の通信にCOMオブジェクトを使用
オブジェクト。 次のコードは、実行方法の例です。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。 2つの同時スレッドを実行する予定です...問題は、通信目的で使用できるクリップボードが1つしかないことです。別のものを手に入れるために、2つの別々のウィンドウセッションでアプリケーション全体を実行する予定です。その場合、私は2つの別々のシングルスレッドソリューションを持っています。自分のオフィスアプリを実行しているサービスのコピーが2つあり、私は2つの別々のクリップボードを持っています。
問題
一つの問題は未解決のまま - 私はどのように異なるユーザーセッションで実行するためにこれらのオフィスアプリケーションを強制的には考えています。私が見ているものから、彼らは常に最低のIDでセジソンに乗っています。
私は同様の質問を見つけました - On Terminal Server, how does a service start a process in a user's session?しかし、プロセスを実行するのはCOMオブジェクト経由でオフィスアプリケーションを実行するのと似ていません。
EDIT: 私は私がいないWindowsサービスからではなく、WINDOWSからEXCELを開いた場合は、アプリケーションをFROMS、EXCELは異なった動作を気づきました。これは、最下位のIDを持つユーザーセッションでは開始されず、WINDOWS FORMS APPが実行されているのと同じアカウントで開かれます。それ何とか私の問題を解決し、私は2つの並列プロセスを実行できるようになります:)
「コア」コード(開いているアプリケーション、コピー)を別のプロセスに移動できますか?異なる資格情報でそのプロセスを開始することができます。 –
はい、私はそれを変えることはできません。私は別の方法を指定する方法がないので、Excelはデフォルトのセッションで開始します。コードを別のスレッドに移動しても、同じWindowsアカウント(セッションIDが最も低い)の下で2が有効になります。つまり、使用するクリップボードが1つだけになります。このソリューションのために2つのクリップボードが必要です作業。 –
私は新しいスレッドを開始するのではなく、全体のプロセスのために新しいプロセスを開始することを意味します。異なる資格(ユーザー)でプロセスを実行することができます。しかし、あなたが変更したくない/できない場合... –