超ニッチな話題なので、ほとんど誰にも役に立たないと思うけど、自分用の備忘録です。(時々、ボウビロクかビボウロクか訳がわからなくなる・・)
Flashからプロジェクタ形式にパブリッシュすると、hoge.exeという実行形式のファイルが出来るのですが、swfに一皮かぶせただけなので、Windows/Macのアプリとしての機能はかなり貧弱。
しかし、ブラウザを必要としないし、タダのswfよりexeというだけでエラそうな感じではある。
まだはっきりとした保障はないのだが、swfのままだと、Flash Playerのセキュリティの制限をかなり受ける(クロスドメインで通信できないとか)のだが、exeだとすこし緩くなるようだ。(かなり自信ないけど)
実際、swf(つまりFlash Player)ではポリシーファイルが無いためSocket接続できなかったものも、プロジェクタ形式だと、ふつうに通信できた。
ActionScript2.0には、バイナリのSocketが無いため、シリアル通信には不向きということは先日書いた。
だから、AS2.0で作ったアプリとLocalConnectionで接続できるAS3.0のプロクシアプリを作って、AS3.0のプロクシアプリが、シリアルプロクシのserproxy.exeと通信するというヤヤコシイ方法でシリアル通信をしたのだが、この方法だと、メインのアプリ以外に常に2つのプロクシアプリが起動しておく必要がある。
fscommandからコマンドを起動できるのはできるけど、かなり使い勝手が悪い。
そこで、プロクシ2つ→メインアプリと起動するbatファイルを作ったのだが、今度は、既に起動してる状態でbatファイルを起動されると、全てのアプリが2重に起動してしまう。
ちゃんとしたアプリなら、アプリケーションアイコンをダブルクリックしても、プロセスが多重起動することなく、既存のプロセスに移行するのだが、Flashプロジェクタはそこまで賢くない。
(たとえば、@IT:.NET TIPS Windowsアプリケーションの多重起動を禁止するには?)
serproxy.exeには手を入れることができないので、AS3.0のLocalConnection⇔Socketプロクシアプリに、
- 多重起動チェック用のLocalConnection ID宛に接続を試みる(この時点ではまだconnectしてない)
- もし、接続できた場合、多重起動なので、fscommandでquitする
- 接続できない場合、シングル起動なので、多重起動チェック要のLocalConnection IDにてconnectし、待機する
という方法で、このプロクシアプリの多重起動についてはなんとか対処できた。
・・・しかし、もっとシンプルな方法があった。バッチファイルに
taskkill /IM app2.exe taskkill /IM serproxy.exe start /MIN app2.exe start /MIN serproxy.exe
というふうに、起動する前に、同じプロセス名のプロセスがあったら強制的にぬっころす!というふうに書けばOK.
killallみたいな感じだね。
serproxyは、Flashでシリアル通信する人にとっては超必須なアプリなので、上記のようなバッチファイル作っておけば、毎回、起動したり終了したりをしなくて便利です。
mProjectorで同様のことができたら、そっちに移行するんだけどなー
Popularity: 10% [?]




