現在Filemakerのランタイムアプリケーションと、
なでしこプラグインのランタイム版を使ったアプリケーションを開発中だ。
そのアプリケーションをインストーラーとして固めて配布するときの注意Win7版覚書です。
 
ランタイムアプリケーションは、
Filemaker本体なしで、FMのDBアプリケーションが利用できる有用な機能だ。
(DB構造が変更できないなど制限はある)
ノンプログラマでも、スタンドアロンアプリケーションが作れる。
 
 
ランタイムアプリを作成すると、
フォルダの中に非常に多くのファイルが詰め込まれた状態で、
アプリケーションがアウトプットされる。
普通に使うには、
そのフォルダをデスクトップやマイドキュメントあたりに格納して使えば
特に問題はおきません。
 
しかし、それらをインストーラーとして固めて配布する場合に注意すべき点が多々あります。


  
1)インストール先
ファイルメーカーはデータベースソフトウェアで、
ランタイム版も同様にデータベースソフトウェアです。
データベースならば、当然、アプリケーション自体または付属のファイルに
利用する都度ファイル保存や書き換えが行われます。

通常アプリケーションの格納場所は
C:¥program files¥
だと思うのですが、
このディレクトリの下にあるファイルは、
通常ユーザーではファイルの保存や変更はアプリケーションから行うことができません。
つまり、Filemakerのランタイムアプリでは、
レコードの追加やフィールドの変更など、
データベースとして重要な機能を使えず、
ReadOnlyなデータベースアプリケーションになってしまうというわけです。
 
これでは話になりません。
 
ということで、Filemakerランタイムアプリの場合は、
ドキュメントフォルダや、ユーザーデータフォルダなどにインストールするように、
インストーラーを設計した方が吉です。
私の実験では、C:¥直下でも大丈夫だったようですが、
世間的にはあまり推奨されていないようです。
 


 
2)ファイルのコピー
多分、通常のランタイムアプリをインストーラーにする場合は、
1の対応だけで問題ないはずですが、
 

 
今回は、エクセルのテンプレートファイルを用意しておき、
エクセル表示時に表示用のファイルをコピーで新たに作成して、
表示用ファイルへ表示する内容を流し込む。
という動きを自動的に行うよう、
なでしこプラグインによって制御しているのですが、
このコピーという動作は、
たとえ、ユーザーデータフォルダや、ユーザードキュメントフォルダであっても、
UACの制限をうけ、アプリケーションから実行することができませんでした。
 
管理者権限でアプリケーションを実行している場合のみ、
コピーの制御ができるようです。
 
Vistaのときは、いつでも管理者権限でアプリを起動する手段があったようですが、
Win7はどうなんだろう…どっちにしても回り道なのであまり考えたくありません。
 
コピーがだめなら、エクセルを制御しているわけだから、
一度テンプレートのエクセルファイルを開いてしまって、
自動で別名保存するようにすればいいじゃないかと思って、
これも行ってみましたが、拒否されるようです。
(なぜかOpenOffice.orgを制御する場合はそれでいけた)
 
どうしようか…と思って試行錯誤したところ、
なでしこでテンプレートファイルの内容をバイナリとして、
なでしこの変数に保存し、
なでしこでファイルを作成して、そこへ変数に保存されたバイナリを流しこんで保存。
という回りくどい手段を使えば、擬似的にコピーを
UACの影響なしに行えることがわかりました。
 
多分ですが、Win32APIのCopyFile関数がUACの監視下にあるのだと思います。
開いて内容取得→ファイル作る→取得した内容保存
ですと、CopyFileを使うことはないのでUACの影響を受けなかったのではと思います。
 
これはおそらく他の言語とかでも役に立つはず。
 


Win7でFilemaker+なでしこのランタイムアプリをインストーラーで配布する場合は、
とりあえず、以上で今のところ問題点は見つかっていません。
 
Win7は比較的セキュリティは高いのに、仕組みはシンプルなので、
要点を押さえれば、アプリ開発はすんなりいきます。 
問題はVistaです。こっちはハマりまくったので、
また次回レポします。