株式会社ライブキャストロゴ 株式会社ライブキャスト

flashcast:フリーで働くITエンジニア集団のブログ: AIRアプリをログイン時に起動させる方法でスタートアップメニューにAIRアプリのショートカットを作成する方法をご紹介しましたが、この方法にはいくつか難点がありました。

  • アプリケーションでショートカットを登録しているので、アンインストール時に(インストーラにより)削除はされない。
  • 毎回アプリの起動時にコールされるとショートカットを手動で削除しても、毎回作り直されてムカツク。
  • 逆に初回のみしか起動されないようなロジックを書く(SharedObject等)と、一度でもアンインストールすると、自動的にはショートカットが作成されない。

これを解決するために、<アプリ名+META-INFディレクトリの作成日時(インストール日時)>の共有オブジェクトを生成し、起動時にこの共有オブジェクトが存在するかで初回起動か否かを判別します。存在しなければ初回起動です。

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()">
 <mx:Script>
  <![CDATA[
   private function initApp():void {
    var name:String = "jp.flashcast.TestApp";
    var file:File = File.applicationDirectory.resolvePath("META-INF");

    if (file.exists) {
     name += file.creationDate.time
    }

    var so:SharedObject = SharedObject.getLocal(name);

    if (so.size == 0) {
     so.data.startAtLogin = true;
     so.flush();

     NativeApplication.nativeApplication.startAtLogin = true;
    }
   }
  ]]>
 </mx:Script>
</mx:WindowedApplication>

これで難点の2、3点目はクリアできそうです。

  • 毎回アプリの起動時にコールされるとショートカットを手動で削除しても、毎回作り直されてムカツク。

インストール後の2回目以降の起動では、<アプリ名+META-INFディレクトリの作成日時(インストール日時)>の共有オブジェクトが存在するので、ショートカットは作り直されません。

  • 逆に初回のみしか起動されないようなロジックを書く(SharedObject等)と、一度でもアンインストールすると、自動的にはショートカットが作成されない。

アンインストール後の再インストール時や、バージョンアップに伴うアップデート時にはMETA-INFディレクトリの作成日時が変更されますので、自動的にショートカットが作成されるようになります。

ちなみに、FlexBuidler3.0でのデバッグ時に発生する以下の例外を、

Error: Error #2014: Feature is not available at this time.
at flash.desktop::NativeApplication/set startAtLogin()

コンパイルオプションによって回避する方法もご紹介しておりますが、

-define=CONFIG::release,false

この例外が発生するのもプロジェクト作成後の初回起動時のみですので、いらないかもしれませんね。