FlashAirを使っていて、カードを抜き差しする場面は2つある。
1つは、設定の更新や、起動時Luaスクリプト実行のテストなどで
FlashAirの電源を入れ直す必要がある場合。
もう1つは、LuaスクリプトなどでFlashAirの中身が書き換わったが
Windows側のキャッシュが更新されていないため、見えないという状態を解決するために
読み込み直しの手段が再接続しかなく、しかたなく行う場合。
割合としては、後者のほうが多いだろう。
SDカードスロットやUSBコネクタは、頻繁な抜き差しに耐えうる構造になっているとはいえ、
大規模なプログラムになるに連れ、デバッグにはかなりの回数の抜き差しが発生するというのは
容易に想像できる。
そこで、どこかのサイトで見かけた方法を使用することにした。
SDカードリーダーは大抵の場合、USB経由で接続されている。(外付け・内蔵問わず)
そのため、デバイスマネージャから、一度無効にし、有効にすれば、
USB機器が再接続されたものと認識され、外部記憶装置の再読み込みが行われる。
しかし、それを手動でやるのはダルい。
そこで、Windowsのドライバー作成キット、WDKに内蔵されている
Windows Device Console (devcon.exe)を使う。
devcon.exeは、デバイスマネージャでできることを、コマンドライン上で実行できるようにする
公式のツールで、バッチファイルからデバイスの操作が可能になる。
詳しくは他サイトを参照して欲しいが、以下の様なバッチファイルを作成すれば良い。
devcon disable "USB\VID_0000&PID_0000&REV_0000"
devcon enable "USB\VID_0000&PID_0000&REV_0000"
USB\VID_0000&PID_0000&REV_0000の部分については、USB機器固有の情報であり、
デバイスマネージャで対象機器(ここではSDカードリーダー)のプロパティを開き、
ハードウェアIDを参照すれば、そのままのものが載っている。
この時、バッチファイルは管理者権限で実行する必要がある。
簡単にやるのであれば、バッチファイルを右クリックし、管理者権限で実行すればよいが、
バッチファイルが起動された時、管理者権限でなければ管理者権限で実行するような
バッチを組むと、さらに便利になる。
バッチファイルからUAC昇格ダイアログを表示する by @hymtk7 on @Qiita http://qiita.com/hymtk7/items/b3b77ad3375095dcd7eb
また、この操作では、USB機器をぶち抜き、ぶっ挿していることになる。
他のツール等を組み合わせ、安全な取り外しをしてから
再接続するようにしても良いかもしれない。
自分の使っているバッチファイルを以下に示す。
動作の保証はしない。
昇格部分には、上記のページのものを参考にさせていただいた。
------ remount.bat -------
@set @temp=0/*
@echo off
whoami /groups | find "S-1-16-12288" > nul
if "%errorlevel%"=="0" (
echo 管理者権限で実行しています。
) else (
echo 管理者権限が必要です。
echo Relaunching Elevated: "%~dpnx0" %*
if '%1'=='ELEV' (
shift
) else (
cscript.exe //e:jscript //nologo "%~f0" "%~0"
exit /B
)
)
devcon disable "USB\VID_0000&PID_0000&REV_0000"
devcon enable "USB\VID_0000&PID_0000&REV_0000"
goto :EOF
*/
var UAC = new ActiveXObject("Shell.Application");
UAC.ShellExecute(WScript.Arguments(0), "ELEV", "", "runas", 1);
2015年11月24日
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/181155302
※言及リンクのないトラックバックは受信されません。
この記事へのトラックバック
http://blog.sakura.ne.jp/tb/181155302
※言及リンクのないトラックバックは受信されません。
この記事へのトラックバック