2012年12月29日土曜日

AppInventor Portable for Windows(仮) Part4


AppInventor Portable for Windows(仮) Part3 に引き続きPart4です。

前回はAppInventorサーバとBuildサーバをローカルに立ち上げるフルセット版でした。

でも、自前でサーバはいらないのでJavaとAppInventorセットアップをインストールしないでMIT版AppInventorが使えればいいんだけど・・・という方もいらっしゃると思います。

そのような場合は、前回のバッチファイルでサーバ立ち上げ部分を注釈文(REM)にするだけでお望みのものが作れます。AI4A-ConfiguratoinsやGoogleAppEngine SDK for Javaは不要になりますのでUSBメモリにコピーする必要は無くなります。


また、JavaについてもJDKではなくJREで十分です。以下の説明ではJDKのまま説明していますが、JREの方が良い場合はJREのフォルダ構成で置き換えてもらえれば大丈夫なハズです。



バッチファイルの内容は前回とほぼ同じですが、一応以下に貼り付けておきます。

・AIPortableSL.bat
REM AppInventor Portable for Windows(64bit)
@echo off
NET SESSION > NUL 2>&1
IF %ERRORLEVEL% == 0 (
    ECHO 管理者として実行中. AppInventor実行環境を設定します.
    GOTO START
) ELSE (
    ECHO 管理者として実行していません. AppInventor環境セットアップが起動できません. 右クリックで「管理者として実行」で起動してください >&2
    PAUSE
    EXIT /B 1
)
:START
set JAVA_HOME=%~dp0\jdk1.6.0_37
set STPATH=%PATH%
set PATH=%JAVA_HOME%\bin;%PATH%
assoc .jnlp=JNLPFile
ftype JNLPFile="%JAVA_HOME%\jre\bin\javaws.exe" "%%1"
mklink /D "C:\Program Files\AppInventor" %~dp0\AppInventor
pause
rmdir "C:\Program Files\AppInventor" 
set PATH=%STPATH%
set JAVA_HOME=
ftype JNLPFile=
assoc .jnlp=

使い方はJavaもAppInventorセットアッププログラムもインストールされていないPCにUSBメモリを挿し、上記バッチファイルを右クリックして「管理者として実行」します。その後、WebブラウザでMIT版AppInventorにアクセスしてBlocksEditorを起動すれば普通に使えるようになります。

サーバを起動しないこの構成であれば、WindowsXP対応をすることも可能ですね。

以下は、WindowsXPの時に条件分岐して対応させるバッチファイルを貼り付けておきます。もちろん、32bitが大半であるXPの場合はJavaを32bit版にしておかなければ動作しませんのでUSBの中のJavaを32bit版に入れ替えてください。

また、Windows Server 2003 Resource Kit Toolsのインストールを行い、

C:\Program Files\Windows Resource Kits\Tools 

以下にあるlinkd.exeコマンドのみをUSBメモリにコピーすることも忘れないでください。これが無いとWindowsXPではシンボリックリンクが作成できないためです。

バッチファイル側ではVista以降でmklink.exeを使っている部分をXPの場合はlinkd.exeを使うように条件分岐させます。

・AIPortableSL.bat

@echo off
REM AppInventor Portable for Windows(32bit)
NET SESSION > NUL 2>&1
IF %ERRORLEVEL% == 0 (
    ECHO 管理者として実行中. AppInventor実行環境を設定します.
    GOTO STARTING
) ELSE (
    ECHO 管理者として実行していません. AppInventor環境セットアップが起動できません. 右クリックで「管理者として実行」で起動してください >&2
    PAUSE
    EXIT /B 1
)
:STARTING
set JAVA_HOME=%~dp0\jdk1.6.0_37_32
set STPATH=%PATH%
set PATH=%JAVA_HOME%\bin;%PATH%
set ISXP=1
assoc .jnlp=JNLPFile
ftype JNLPFile="%JAVA_HOME%\jre\bin\javaws.exe" "%%1"
ver|find "XP" > NUL
if %ERRORLEVEL% == 0 (
      set ISXP=0
      GOTO WINXP
)
mklink /D "C:\Program Files\AppInventor" %~dp0\AppInventor
GOTO CONFIG
:WINXP
echo Windows XP
.\linkd.exe "C:\Program Files\AppInventor" %~dp0\AppInventor
:CONFIG
pause
if %ISXP% == 0 GOTO WINXPEND
rmdir "C:\Program Files\AppInventor"
GOTO END
:WINXPEND
.\linkd.exe "C:\Program Files\AppInventor" /d
:END
set PATH=%STPATH%
set JAVA_HOME=
ftype JNLPFile=""
assoc .jnlp=

こちらの実行方法も基本的には同じですが、WindowsXPでは管理者権限のあるユーザであれば、ダブルクリックで起動して実行可能だと思います。


一部、他のバッチファイルと記述が異なる部分がありますが、若干XP環境で挙動が異なる部分があったためこのようになっています。こういう基本的な機能で差異があるのはちょっと困りますね・・・。

(追記)
上記バッチファイルをGitHubで公開しました。
AIPortableSL.bat

■共通の注意事項
管理者権限で実行する部分がありますので、動作検証は十分に行ってください。本記事の内容を利用してPCに何らかの問題が発生しても一切責任を負うことはできませんのであらかじめご了承ください。


■余談
いずれの方法も管理者権限が必要なのは共通しています。どうせ管理者権限が必要ならインストールした方がいいんじゃ・・・というのもあります。ただ、どうしても環境変数の設定などいくつかそういう設定が必要なものがありますが、初心者の方にそれをさせないという点で意味があるのではないかと思います。

また、メインドライブがSSDで容量を少しでも節約したいという場合にも役に立つのではないかと考えています。

記事中に間違いなどがありましたらコメントでお知らせいただければ幸いです。

(追記)
管理者権限の問題はやはりどうしても避けて通れなさそうです。少なくとも.jnlpファイルの関連づけには管理者権限が必須であるためです。

ちなみにmklink.exeやlinkd.exeを利用してシンボリックリンクを作成しないで実現する方法も判明しました。

AppInventorセットアッププログラムのファイル所在のPATH情報は

%USERPROFILE%\.appinventor\appinventordirectorycache

に保存されます。従ってバッチファイルでこのファイルを生成するようにしてやることでシンボリック作成プログラム不要でも同じ結果が得られるのです。BlocksEditor起動時にこちらのキャッシュを参照しているようです。

しかし、ユーザのホームフォルダにフォルダやファイルを作成するにしても、どうやらUSBメモリにあるバッチファイルからHDD内にファイルやフォルダを作成するには管理者権限が必要になるようです。

ということで、管理者権限を避けて通ることは残念ながら現状では無理なようです。





2 件のコメント:

  1. 以前コメントさせていただいたものです。
    ここまで説明いただき本当に助かります。

    Part3を見せていただだいた段階で、今回の方針は

    ・講師用のPCにPart3のサーバを構築
    ・受講用クライアントにはサーバ部分を除いたもので構築
    ・受講者への持ち帰り用にインターネットでのAppInventor環境構築セットアッププログラムを配布

    という方向で考えていました。

    ・・・まさかその後にほぼそのまま使用できそうな内容を投稿していただきうれしい限りです。

    とりあえずサーバを入れる予定のマシンがWindowsXPの32bitでメモリが3G(実質2.25G程度)なので、来年にでも動作検証してみます。

    あとは欲を言うなら、サーバはともかくクライアント部分だけのものは管理者権限を与えなくても行けると最高なのですが・・・どう考えても無理っぽいですね。

    改めて、非常に有用な情報を公開していただき本当にありがとうございました。

    返信削除
    返信
    1. コメントいただきありがとうございます。

      > あとは欲を言うなら、サーバはともかくクライアント部分だけのものは管理者権限を与えなくても行けると最高なのですが・・・どう考えても無理っぽいですね。

      そうなんですよね。
      本当にここを何とかできれば一番嬉しいのですが、仕組み上どうにもならないのが苦しいところです。

      もちろん、MIT版を使わずに自前サーバを使い続ける前提なら、AppInventorそのものに手を入れて管理者権限無しで動かせるようにBlocksEditorを改造してしまうというのもアリだとは思います(オープンソースになっていますのでそれも可能ですので)。

      動作検証のご報告などいただければ幸いです。

      削除

おすすめ書籍