C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

C#でエクセルのプロセスを奪われない方法について教えてくださ

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■82825 / inTopicNo.1)  C#でエクセルのプロセスを奪われない方法について教えてくださ
  
□投稿者/ ケンゴ (1回)-(2017/02/08(Wed) 16:31:27)

分類:[.NET 全般] 

開発環境 : VB2015
使用言語 : C#

アプリで開いたエクセルのプロセスを後から開いたエクセルに
プロセスを奪われない方法はないでしょうか。

エクセルの起動には、
excel.applicationを利用しています。

以上、よろしくお願いいたします。
引用返信 編集キー/
■82826 / inTopicNo.2)  Re[1]: C#でエクセルのプロセスを奪われない方法について教えてくださ
□投稿者/ 魔界の仮面弁士 (1119回)-(2017/02/08(Wed) 16:49:02)
No82825 (ケンゴ さん) に返信
> 開発環境 : VB2015
> 使用言語 : C#
どういうことでしょう?
C# で DLL を作り、それを VB2015 から利用しているとか?


> アプリで開いたエクセルのプロセスを後から開いたエクセルに
> プロセスを奪われない方法はないでしょうか。
「プロセスを奪われる」というのがどういう状態を指すのかにもよりますが、
Excel.Application の Interactive プロパティを一時的に False にしておけば、
ユーザーからの操作(マウスやキーボードなど)を受け付けなくなるので、
他からの操作で阻害されることは無くなります。
(操作を禁ずるのはユーザー操作だけであり、DDE や OLE での操作には応答します)

ただし Interactive = False であっても、各種ダイアログについては、
そのまま表示されることに注意して下さい(未保存ブックを Save した場合など)。
ダイアログが表示されると、ユーザーがダイアログを閉じるまで
オートメーション等の操作もできなくなりますので、邪魔な場合には、
DisplayAlerts プロパティで抑制するなどして対処してみてください。
引用返信 編集キー/
■82827 / inTopicNo.3)  Re[2]: C#でエクセルのプロセスを奪われない方法について教えてくださ
□投稿者/ ケンゴ (2回)-(2017/02/09(Thu) 10:56:30)
No82826 (魔界の仮面弁士 さん) に返信
> ■No82825 (ケンゴ さん) に返信
>>開発環境 : VB2015
>>使用言語 : C#
> どういうことでしょう?
> C# で DLL を作り、それを VB2015 から利用しているとか?
>

すいません。間違えました。
VS2015です。

>>アプリで開いたエクセルのプロセスを後から開いたエクセルに
>>プロセスを奪われない方法はないでしょうか。
> 「プロセスを奪われる」というのがどういう状態を指すのかにもよりますが、
> Excel.Application の Interactive プロパティを一時的に False にしておけば、
> ユーザーからの操作(マウスやキーボードなど)を受け付けなくなるので、
> 他からの操作で阻害されることは無くなります。
> (操作を禁ずるのはユーザー操作だけであり、DDE や OLE での操作には応答します)
>
> ただし Interactive = False であっても、各種ダイアログについては、
> そのまま表示されることに注意して下さい(未保存ブックを Save した場合など)。
> ダイアログが表示されると、ユーザーがダイアログを閉じるまで
> オートメーション等の操作もできなくなりますので、邪魔な場合には、
> DisplayAlerts プロパティで抑制するなどして対処してみてください。

プロセスを奪われないは以下のようなイメージになります。
アプリでエクセルを起動し、書き込み

アプリでエクセル書き込み中にパソコンを操作し、エクセルを起動
このとき、アプリとは別プロセスになるようにしたい。

わかりにくくて申し訳ありませんが、よろしくお願いいたします。

引用返信 編集キー/
■82828 / inTopicNo.4)  Re[3]: C#でエクセルのプロセスを奪われない方法について教えてくださ
□投稿者/ 魔界の仮面弁士 (1120回)-(2017/02/09(Thu) 11:48:15)
No82827 (ケンゴ さん) に返信
> アプリでエクセル書き込み中にパソコンを操作し、エクセルを起動
> このとき、アプリとは別プロセスになるようにしたい。

この辺、Excel 2010 以下なのか、Excel 2013 以降かで動作が異なりますが、
意図的に別プロセスにするなら、/x コマンドか ALT 操作が必要です。


運用回避的なところでは、8年前の古い記事ですが No31891 あたりとか。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=31891&KLOG=57
引用返信 編集キー/
■82862 / inTopicNo.5)  Re[4]: C#でエクセルのプロセスを奪われない方法について教えてくださ
□投稿者/ Atata!! (2回)-(2017/02/15(Wed) 00:31:42)
他の案を挙げてみました。


1.IgnoreRemoteRequestsを使用する
過去ログにあったような気がしたので探してみました。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=9590&KLOG=22

ただし、これは運用上のデメリットが大きいので、あんまりお勧めしません。


2.CreateDesktopを使って別デスクトップでExcelを操作する
DDEは同一のデスクトップでしか動作しないため、
別のデスクトップにすれば反応しなくなります。
ただし、別のデスクトップのプロセスに対しては CoCreateInstance も機能しません。
そのため Excel を操作するプロセスごと別のデスクトップで動作させる必要があります。

簡単なサンプルを作ってみました。
めんどうなので別プロセス部分は VBS で代用しています。
http://atata.sakura.ne.jp/download/CreateDesktopTest.zip
セキュリティの制限で VBS が正しく動作しない場合はそれなりに対処してください。

同様にサービスとして実装したりしても、プロセスを分離することはできます。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ