2010/07/02

Hou to use XPECMD

How to use XPECMD


Windows Embedded Standard 2009(WES2009)のツールのひとつ。
スクリプトベースのコンポーネント管理ツール。
  • ランライム構成の作成、読み込み、保存
  • コンポーネントの追加、変更、削除
  • 依存関係の分析
  • ランタイムビルド
  • データベースへのコンポーネントのインポート、削除
などができる。

個人的感想。
利点:
TDesignではプロパティの変更記録(結果としてSLXは残るけど)トレースできないが、応答ファイルとして変更を記述(=記録)できる
欠点:
痒いところまで手が届かない

解説

2010/05/31

VBScriptを管理者権限へ昇格して実行

VBScript and UAC elevation

Vista/7環境ではWSHスクリプトを「管理者として実行」で実行できない。
(悪意あるスクリプトを防ぐ/ユーザーアカウント制御(UAC)のため)

それによりレジストリの書き込みなどが出来ない。
(HKCUキー以外の、かな。HKLMには書き込めないのを確認)

そこで以下のスクリプト、7対応。
WSH/OSのバージョンをチェックし、5.7/OS6~ならrunasコマンドを使い、管理者権限で実行しなおす。
これでUACが出て昇格でき、レジストリも書き込める。

' 管理者権限に昇格
' WScript.Arguemnts.Count = 0:GUI 1:CUI
do while WScript.Arguments.Count = 0 and WScript.Version >= 5.7

  ' Check WScript5.7~ and Vista~
  Set wmi = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
  Set os = wmi.ExecQuery("SELECT *FROM Win32_OperatingSystem")
  For Each value in os
    if left(value.Version, 3) < 6.0 then exit do  'Exit if not vista
  Next
 
  ' Run this script as admin.
  Set sha = CreateObject("Shell.Application")
  sha.ShellExecute "wscript.exe", """" & WScript.ScriptFullName & """ uac", "", "runas"
 
  WScript.Quit
loop

' todo:
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.RegWrite "HKLM\SOFTWARE\Test\Value", "Test", "REG_SZ"
runasコマンドについてはここ参照。 ※コマンドプロンプトからスクリプトを実行する際は、コマンドプロンプトを管理者権限へ昇格してスクリプトを実行すれば良いだけの話です。 >コマンドプロンプトを管理者へ昇格して実行 Original Ref:
Windows VistaでのWSH(VBScript)の管理者権限への昇格方法, 思うところはあるがここには書かない - ebi's diary(2008-08-13) http://ebi.dyndns.biz/diary/20080813.html
ORCA愉快日記(2009-05-22):VBScriptでVistaのUACの権限昇格を行う方法 http://hitaki.net/diary/20090522.html

コマンドプロンプトを管理者権限へ昇格して実行

How to Run Command Prompt as Administrator ?

1.普通

スタートメニュー>すべてのプログラム>アクセサリ>コマンドプロンプト:右クリック>管理者として実行

2.面倒くさがり屋の貴方に

1.コマンドプロンプトへのショートカットを作成
2.ショートカットのプロパティ>タブ:ショートカット>詳細設定>管理者として実行:チェック

恒久的に使えます。

※タブ:互換性に「管理者としてこのプログラムを実行する」項目もあるが、これはWindows標準のシステムプログラムに対しては設定出来ない、らしいぞ。

3.ショートカッターな貴方に

WindowsKey>[cmd]入力>[Shift]+[Ctrl]+[Enter]
スタートメニューを開く>プログラムとファイルの検索で[cmd.exe]を探す>Shift+Ctrlで管理者として実行の意。


※いずれにせよUACは出て許可を求められる(ユーザーの許可なく昇格しては意味がないって事か)

Original Ref:
Windows 7 __管理者権限でcmd.exeを実行したい、素早く!____
http://social.answers.microsoft.com/Forums/ja-JP/w7programsja/thread/efef116a-2ea7-43f5-ac06-f553737870fa

Windows Vistaでプログラムを管理者モードで実行する - @IT
http://www.atmarkit.co.jp/fwin2k/win2ktips/899uacpromo/uacpromo.html

2010/05/20

Firefoxの検索エンジンへgooの辞書(すべて)を追加する

このページを中々見つけられない。

2010/05/19

バッチファイルの書き方

How to Write a Batch File

コメント

rem [コメント]
rem ここがコメントになり、解釈や実行はされない

文字を出力する

echo [[on | off] | [メッセージ]]
コマンドプロンプトが表示された時点で、"echo on"になっている。
普通、処理内容を表示しないので、標準的に1行目に"@echo off"を記述する。

"@"は、コマンドを画面表示させずに実行するためのバッチファイル制御記号。

バッチファイルの先頭に"echo off"を記述しても、実際に反映されるのは2行目以降になるため、"echo off"を実行した文字列だけが表示されてかっこ悪いから"@"をつける。
test.bat>>
@echo off
echo Message   // Messageが表示される
echo.          // 空白行が表示
echo]          // 空白行が表示
echo on        // echo文そのものも表示
echo Message   // Messageが表示される

$ test.bat
Message        // echo Message
               // echo.
               // echo]
               // echo on
$echo Message  // echo Message
echo Message   // echo Messageの結果

バッチファイルのコマンドライン引数

xxx.bat [引数]
引数は%1~として順に取得できる。
xxx.bat>>
@echo off
echo %1
echo %2
echo %3

$ xxx.bat aaa bbb ccc
aaa
bbb
ccc

環境変数の設定

set [環境変数名]=[値]
set SourceDrive = "D:"
set TargetDrive = %1
※定義した環境変数はコマンドプロンプト終了時に揮発する。

この他に、値を設定するだけではなく、演算や置換、変数中の文字列の取り出しなどもできる。

環境変数の参照

%[環境変数名]%
set SourceDrive = "D:"
echo %SourceDrive%  // "D:"が表示される

参考:既存の環境変数は以下の方法で。
(Windows 7)
マイコンピュータ>右クック:プロパティ>システムの詳細設定>システムのプロパティ:詳細設定タブ>環境変数
コントロールパネル>ユーザーアカウントと家族のための安全設定>ユーザーアカウント>環境変数の変更

条件分岐

if [not] exist ファイル名(コマンド1) [else コマンド2]
if [not][/i] "文字列1" == "文字列2" (コマンド1) [else コマンド2]
if [/i] "文字列1" 比較演算子 "文字列2" (コマンド1) [else コマンド2]
if defined 変数 (コマンド1) [else コマンド2]
if [not] errorlevel 番号 (コマンド1) [else コマンド2]
if cmdextversion 番号 (コマンド1) [else コマンド2]
上から順に、
  • ファイルが存在するか
  • 文字列同士の比較
  • 高度な比較
  • 環境変数が定義されているか
  • errorlevelで他プログラムの終了コードを条件として分岐
  • コマンドインタプリタのバージョンを条件として分岐
他のオプションは、
exist  ファイルが存在する場合に条件が真になる
not    指定した判定条件を反転させる。
/i      文字列を比較する場合に、大小文字を区別しない
比較演算子{ EQU 等しい, NEQ 等しくない, LSS より小さい, LEQ 以下, GTR より大きい, GEQ 以上 }

switchはない。環境変数とGOTO文で似たのを作ることは可能。
set case=[n]
goto CASE_%case%

:CASE_1
処理
goto :CASE_END

:CASE_2
処理
goto :CASE_END

:CASE_END

繰り返し処理

まとめ切れてないので省略

バッチファイルからバッチファイルを呼び出す

call [ドライブ名:][パス]ファイル名 [引数]
callで呼び出すと、呼び出したbatファイルの処理終了後、制御が戻ってくる。

入力待ち

pause
「続行するには何かキーを押してください…」と表示され処理が中断される。
続行するには任意のキー、処理を中止するにはCTRL+C。

ユーザーによる入力

(2000/XP~)キー入力された文字列を環境変数として取り込むことができる。
set /p [環境変数] = "[メッセージ]"
@echo off
set /p Input = "入力してくれい"
echo %Input%と入力された

これを利用して分岐処理などを行う。
@echo off
echo DISK0にパーティションを作成します。既存のデータは消去されます。
set /p ANSWER="よろしいですか(y/n)"
if "%ANSWER%"=="y" diskpart /s x:\makedisk.ans
exit

Original Ref:
炎のコマンドプロンプト入門
http://www.geocities.co.jp/SiliconValley-SanJose/1227/index.html

コマンドプロンプトを使ってみよう!
http://ykr414.com/dos/index.html

バッチメモ(Hishidama's bat-file Memo)
http://www.ne.jp/asahi/hishidama/home/tech/windows/bat.html