[ Topページへ戻る ]

プログラマーのためのWindows OS関連メモ

Windows Vista 64bit

ソフトウェア開発環境の設定

Perl

64bit版のPerlがActiveStateからフリーで公開されています。

Visual Studio .NET 2003

 Visual Studio .NET 2003自体には、64bitプログラムを作成する能力はありません。しかし、MicrosoftからリリースされているPlatform SDK for Windows Server 2003と組み合わせることで64bitプログラムを作成することができるようになります。

 Visual Studio .NET 2005だと64bitプログラム作成能力がありますが、Professional版以上に限定されているようです。

参考URL

Visual Studio 2010 Express(無償版)

Visual Studio 2010 Express版を使って64bitビルドする方法をブログに記述しています。

コマンドライン環境PowerShell

「システムの管理と自動化用に設計された新しいコマンドラインシェルおよびスクリプト言語」とのことです。.NET Framework上で動くので最初の起動がもっさりです。

Windows 7/2008 R2では、PowerShell 2.0が標準搭載です。

入手とインストール

2007年3月24日時点では以下URLがWindows Vista x64 Edition用PowerShell 1.0入手ページです。

あいかわらずMicrosoftのWebサイトは目的のページへのアクセスが不明でかつころころ変わるだめだめサイトなので、上記URLがいつまで有効で今後いつ変更になるか分かりません。

使用方法メモ

環境変数を扱う

機能 コマンド エイリアス(例) 備考
環境変数一覧を表示する
Get-ChildItem env:
ls env:
指定した環境変数の内容を表示する
Get-ChildItem env:HOME
ls env:HOME
大文字・小文字の区別はないようです
$env:HOME
-
環境変数の設定(新規・変更)
$env:HOME="C:\User\torutk"
- ""で囲まないと文字列として認識されません(エラーとなる)
環境変数の設定(追加)
$env:path+=";C:\Perl"
-

コンソールへの出力

機能 コマンド エイリアス(例) 備考
コンソールへ文字列を表示する
Write-Output "Hello"
echo "Hello"
write "Hello"

ファイル・ディレクトリ操作

ファイルの検索

Unix系のfindツールのように再帰的にファイルを検索する方法です。(Get-ChildItemはデフォルトでエイリアスlsおよびdirが設定されています。)

PS C:\Users\torutk> Get-ChildItem -recurse -include *.java
    ディレクトリ: Microsoft.PowerShell.Core\FileSystem::C:\Uses\torutk\programming\
    java\20050521\sample


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2003/03/01      1:34        546 HelloSwing.java
PS C:\Users\torutk>

デフォルトでは1つのファイルごとに何行も表示されるので、-nameオプションを指定するとよいでしょう。

PS C:\Users\torutk> Get-ChildItem -name -recurse -include *.java
programming\java\20050521\sample\HelloSwing.java
PS C:\Users\torutk>

更新時間で絞込むこともできます。フィルターWhere-Objectを使い、合致したファイルのLastWriteTime属性と日付オブジェクトとの大小比較に合致したものだけが表示されます。

PS C:\Users\torutk> dir -recurse -include *.java | Where-Object 
 {$_.LastWriteTime -ge "2008/03/30 16:00"}
    ディレクトリ: Microsoft.PowerShell.Core\FileSystem::C:\Uses\torutk\programming\
    java\20080330\sample


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2008/03/30      1:34        546 HelloSwing.java
PS C:\Users\torutk>
ファイル内文字列の検索

UNIX系のgrepコマンドのようにSelect-Stringを使うとファイル内文字列を検索できます。

PS C:\Users\torutk> Select-String main Hello.java
Hello.java:27:    public static final void main(final String[] args)
PS C:\Users\torutk>

UNIX系の複合技 find & grep は、Get-ChildItemとSelect-StringおよびForEach-Objectを組み合わせます。

PS C:\Users\torutk> Get-ChildItem -Recurse -Include *.java | ForEach-Object
 {Select-String main $_ }
Hello.java:27:    public static final void main(final String[] args) {
HelloSwing.java:33:    public void main(String[] args)
PS C:\Users\torutk>

省略表記を使うと、

PS C:\Users\torutk> ls -Recurse -Include *.java | %{Select-String main $_}
    :

外部コマンド・プロセスを扱う

機能 コマンド エイリアス(例) 備考
外部コマンドを実行する
Invoke-Item "hello.exe"
ii "hello.exe"
Perlスクリプトの実行時の問題(ActivePerl)

 ActivePerlをインストールし、拡張子(.pl)を関連付けている場合、PowerShell上で直接.plファイルを実行することができます。ただし、別ウィンドウとしてコマンドプロンプトが表示され、スクリプト終了と同時にコマンドプロンプトが消えてしまうので標準出力へ出されたメッセージが読み取れません。

 そこで、明示的にPerlコマンドでスクリプトを実行します。(ちょっと不便ですが・・・)

スクリプトファイルを実行する

PowerShellは標準拡張子.ps1を使用するようですが、インストールした時点では拡張子は関連付けられていません。そこで、.ps1ファイルを実行できるように設定します。実行には以下の2つの形式があると思います。

  1. エクスプローラから.ps1ファイルをダブルクリックして実行する
  2. PowerShell上で.ps1ファイルを実行する
エクスプローラ等から.ps1ファイルを実行する
PowerShell上で.ps1ファイルを実行する

管理者権限でPowerShellを起動し、以下の設定をレジストリに対して行います。

PS C:\Windows\System32> New-Item registry::HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\shell\open\command 
-value '"C:\WINDOWS\system32\WindowPowerShell\v1.0\powershell.exe" "%1"' -force
PS C:\Windows\System32>

また、デフォルトへは未署名のスクリプトファイルを実行できないので、(とりあえず)セキュリティを緩める形でローカルマシン上に限り未署名のスクリプトを実行できるようにします。

PS C:\Windows\System32> Set-ExecutionPolicy RemoteSigned
PS C:\Windows\System32>

これで、通常のコマンドのようにスクリプトファイルのパスを指定すれば実行されます。なお、カレントディレクトリにあるスクリプトファイルを実行する場合、./myscript.ps1 のようにカレントディレクトリを明示する必要があります。

PS C:\Windows\System32> ./myscript
MyScript: no argument
PS C:\Windows\System32>
参考URL

便利な機能

表示のソート

Sort-Object を使用します。

PS C:\Windows\System32> ls env: | Sort-Object Name

Name                           Value
----                           -----
ACE_ROOT                       E:\work\ACE+TAO_VC71\ACE_wrappers
ALLUSERSPROFILE                C:\ProgramData
APPDATA                        C:\Users\torutk\AppData\Roaming
APR_ICONV_PATH                 D:\Program Files (x86)\Subversion\iconv
   : [省略]
PS C:\Windows\System32>

ファイル操作

シンボリックリンク

mklinkコマンドで、UNIXのシンボリックリンクと同様の機能が実現されました。

  ファイル ディレクトリ 概要 
ハードリンク  ∨   1つの実体に対しエイリアス(別名)を作成し共有する。オリジナルを削除しても、エイリアスが残っていれば実体は削除されない。(参照カウント)
ジャンクション  N/A ∨  ネットワークドライブ、UNC、相対パスだめ。オリジナルを削除すると、実体が削除されるので、存在しないディレクトリへのジャンクションが残ってしまう。
シンボリックリンク  ∨ ネットワークドライブ、UNC、相対パスOK。オリジナルを削除すると、実体が削除されるので、存在しないファイル・ディレクトリへのシンボリックリンクが残ってしまう。

使用例

コマンドプロンプトから実行します。管理者権限が必要なので、コマンドプロンプトを右クリックしたメニューから「管理者として実行」を選択して起動し、その上でmklinkコマンドを使います。

ディレクトリのシンボリックリンクを作成
ファイルのシンボリックリンクを作成
C:\Users\torutk\jsr-296>dir /B
AppFramework-0.30.jar
 
C:\Users\torutk> mklink AppFramework.jar AppFramework-0.30.jar
AppFramework.jar <<===>> AppFramework-0.30.jar のシンボリック リンクが作成されました
C:\Users\torutk> dir /B
AppFramework-0.30.jar
AppFramework.jar

C:\Users\torutk>

ネットワーク

telnet

標準ではインストールされないので、コントロールパネル→プログラム→Windowsの機能の有効化または無効化 を実行し、Telnetクライアントをチェックする。

PowerShell 2.0のリモート処理

マルチメディア

DVD

Windows Media Player

Windows Media Playerで、DVDの再生が可能。HDDレコーダで作成したVRモードのDVDメディアをドライブに入れた場合は、メディアの認識ができなかった。

WinDVD

2大有償のDVD再生ソフトの1つ。

Vistaインストールメモ

アップデート版でクリーンインストール

参考URL内容の要約メモ

参考URL

ブートローダ

Vistaのブートの仕組みは、XPから変わっています。

BIOS起動後、ブートデバイスとして認識されたHDDの先頭にあるMBRを読み込みます。MBRのブートコードは、Bootmgr.exeを読み込み実行します。Bootmgrは、BCDを読み込み、Winloadを実行します。

Bootmgrは、ブートデバイスのHDDのシステムパーティション直下にあります。

BCDは、ブートデバイスのHDDのシステムパーティションのBootフォルダ内にあります。

Winload.exeは、VistaのOSをインストールしたドライブのWindows\system32の中にあります。

起動できなくなったときの修復

修復方法は3つあります。

Vista DVDからPCを起動し、「コンピュータを修復する」を選択、「システム回復オプション」の画面を表示させる。以下の3つの方法のいずれかで修復を行います。

  1. スタートアップ修復
    [スタートアップ修復]を選択する。自動で修復が行われる
  2. Bootrecによる修復
    [コマンドプロンプト]を選択する。以下のコマンドを実行する。
    X:\> bootrec.exe /fixboot
       :
    X:\> bootrec.exe /fixmbr
       :
    X:\>
    注)XドライブがDVDとする
  3. BootsectとBcdeditによる再構築
    [コマンドプロンプト]を選択する。以下のコマンドを実行する。
    X:\> X:\boot\bootsect.exe /NT60 All

Bootrec.exeは、Windows回復モードで実行可能です。通常、DVDから起動し、言語・時刻・通貨・キーボードの設定後、[コンピュータを修復する]を選択し、修復するOSをクリックして[次へ]を押します。「システム回復オプション」ダイアログで、[コマンドプロンプト]を選択します。

Windows XP/Vista/7 共通

ファイル操作

NTFSのアクセス制御

Windows XP/Vistaで採用しているファイルシステムNTFSは、アクセスコントロールリスト(ACL)によるアクセス制御を行います。ファイル/ディレクトリをオブジェクトと呼び、オブジェクトごとにACLを設定し、ユーザやグループといったアカウントに対してアクセスの種類に対する許可/禁止判定を行っています。

アクセス権 内容 条件
GENERIC_READ
GENERIC_WRITE
GENERIC_EXECUTE
GENERIC_ALL
ACCESS_SYSTEM_SECURITY
SYNCHRONIZE
WRITE_OWNER
WRITE_DAC
READ_CONTROL
DELETE
FILE_WRITE_ATTRIBUTES
FILE_READ_ATTRIBUTES
FILE_DELETE_CHILD
FILE_EXECUTE ファイルのみ
FILE_TRAVERSE ディレクトリのみ
FILE_WRITE_EA
FILE_READ_EA
FILE_APPEND_DATA
FILE_WRITE_DATA
FILE_READ_DATA

アカウント

SYSTEM
To Be Written
Everyone
全ユーザ

ACLの設定

XPではcaclsコマンドを、VistaではIcaclsコマンドを使用します。

参考情報

ディスク操作

フロッピーディスク

DOS起動フロッピーディスクを作成する

Windows XP/Vistaでエクスプローラ上からAドライブ(フロッピー)を右クリックし、ポップアップメニューの[フォーマット]を選択、フォーマットオプションで「MS-DOSの起動ディスクを作成する」にチェックを入れて[開始]ボタンを押す。

インストーラの作成

Windows OSの標準ソフトウェア管理形式であるWindowsインストーラ(MSI)を作成する方法にはいくつかあります。

Windows Installer XML (WiX)

無償でできる手段はこれになります。

システム管理

システム情報

Windows Vista/7

ディレクトリ構成

Windows Vista/7におけるディレクトリ構成のガイドライン「Windows File System Namespace Usage Guidelines」がMicrosoftから提供されています。

ガイドラインの抜粋をブログに書きました。

Windows XP

ファイル操作

シンボリックリンクのようなもの

NTFSでは、ファイルに対するハードリンクを作成する機能、ディレクトリに対してジャンクションを作成する機能があります。しかし、Windows XPではハードリンクはfsutilコマンドで提供されているもののジャンクションを作成する手段は提供されていません。

そこで、Microsoftの以下サイトから"File and Disk Utilities"→"Junction"とリンクをたどってジャンクション作成ツールjunctionを入手します。中に含まれているjunction.exeをパスの通った場所(面倒であれば、C:\Windows\system32など)に置きます。あとは、コマンドプロンプトでjunctionを実行すればヘルプメッセージが表示されるのでそれを見て作成します。

http://www.microsoft.com/technet/sysinternals/