シンプルぱっと2 Windows Vista対応完了

Posted on :| コメント (0) | トラックバック (0)

 シンプルぱっと2のWindows Vistaへの対応が完了しましたので、報告します。 基本的に取り立てて特殊なことをしたわけではなく、Windows Vistaだけデータの保存場所を変更しただけです。
 次回リリース分から、一応Vista対応となります。

 

■Windows Vistaに対応させるための覚え書き

 自作のソフトをWindows Vistaに対応させるための覚え書きを書いておきます。 これはプログラムを組まない人にはまったく意味のない情報なので、興味のない方は無視してください。

 Windows Vistaはセキュリティ対策と称して、いろいろな制限事項が加わりました。特にしつこいぐらいに出てくるのは、 UAC(User Account Control)です。何か変わった操作をするたびに、UACによる問い合わせが出てくると思います。

 また、Windows VistaはProgram Filesなどのシステムフォルダにデータを保存しようとすると、 勝手にVirtualStoreフォルダに保存してしまいます。この部分の出来があまりよくないため、 シンプルぱっと2をはじめとする一部ソフトで動作不具合が発生しています。
 しかし、システムフォルダ以外にデータを保存するようにすれば、やりたい放題です。

 つまり、Windows Vistaに対応させる鍵は、データの保存場所をシステムフォルダ以外にすることです。

 

■データの保存場所の指定

 お行儀の悪いプログラムは、ドライブの直下(ルートフォルダ)に勝手にフォルダを作ります。Microsoftもよくやりますが、 吉田はこのような暴挙に出るソフトが大っ嫌いです。これに比べれば、 インストール先のフォルダのしたにデータを保存する仕組みの方がよほど行儀が良いと思っています。

 しかし、Microsoftの方針が変更され、アプリケーションデータは、

Windows2000/XP:C:\Documents and Settings\All Users\Application Data
Windows Vista:C:\ProgramData

フォルダに保存するように変更になりました。XPまではここに保存しなくても何の支障もありませんでしたが、 Vistaでは勝手に保存場所を変更されてしまいます。これを避けるためには上記のフォルダに変更する必要があります。

 しかし、データフォルダの保存場所の変更は、気をつけないとユーザーの環境の違いでエラーが出る場合があります。特に、 フォルダを決め打ちするようなやり方は問題有りです。

 そこで、SHGetSpecialFolderPathというAPIを利用します。 このAPIはWindowsの特殊フォルダパスを取得するためのAPIです(Windows2000以降でないと利用できない)。 引数として、CSIDL_COMMON_APPDATA (&H23)を指定すると、 アプリケーションデータフォルダが返されます。

Private Declare Function SHGetSpecialFolderPath Lib "SHELL32" Alias "SHGetSpecialFolderPathA" (ByVal hwndOwner As Long, ByVal lpszPath As String, ByVal nFolder As Long, ByVal fCreate As Long) As Long

Public Function GetSpecialFolder() As String
Dim ret As Long, path As String

    'CSIDL_COMMON_APPDATA = &H23   = C:\ProgramData

    path = String$(255, vbNullChar)
    ret = SHGetSpecialFolderPath(vbNull, path, &H23, 0)
    path = left$(path, InStr(path, vbNullChar) - 1)

    GetSpecialFolder = path

End Function

これでOKです。ただし、Windows9x系のOSではいろいろと支障があるので、 インストールフォルダのしたにデータを保存した方が無難です(バージョンにより処理を分ける)。

 

■レジストリへの保存

 何かと嫌われ者のレジストリですが、そもそもデータはここに保存しろと指定してきたのは、 Microsoftです(レジストリはWindows95ではじめて導入されました)。
 しかし、これにもいろいろと制限が加わっています。まず、 VistaではHKEY_LOCAL_MACHINEにデータを書き込むことは出来ません。管理者権限が与えられないためです。 LinuxなどのOSでは当たり前なのですが、Windowsは基本的に管理者権限で動かしてきたOSなので、 この変更は大きなものになります。

 異常終了させないようにするためには、HKEY_CURRENT_USERに保存するようにしなければなりません。

 

■雑感

 Windowsのセキュリティが強化されることは結構なことです。ただ、それでもセキュリティホールがなくならないのですが。
 今回紹介した変更点は、Microsoftのセキュリティに対する取り組みの一環ですが、 マルチユーザー環境を前提とした従来までのUACの考え方に基づくところに疑問を感じます。

 WindowsはデスクトップOSとしてシェアNo.1であり、これは疑いようのない事実です。また、 パソコンが安価になったことにより、1人に1台のパソコンが与えられています。唯一家庭内で使用されるパソコンのみが、 複数のユーザーが利用するものとなりますが、それでも家族という社会の最小単位であることを考えると、 ここにマルチユーザーの考え方を安直に持ち込むことに疑問を感じます(子供や嫁に見せたくないフォルダがあることは確かですが……笑)。

 多くのセキュリティ上の脅威はインターネットを通じてやってくるわけで、そこを強化しない限りはUACをいくらいじっても無駄です。 例えば、MSNやHotmail利用者のメールにHTMLメールが多いのはなぜでしょうか?多くのユーザーがいると思われるOutlook Expressのデフォルト設定もHTMLメールのままです。テキスト形式なら何の脅威にも為らないメールが、 HTMLメールになったとたん、非常に危険な存在になります。

 Microsoftは互換性を損なう余計な変更よりも、過去の自社製品やサービスについて対策を講じるべきですね。

 

トラックバック

このエントリーのトラックバックURL:

コメント

コメントフォームに記入し投稿してください





Search
最近の記事
カテゴリー
過去の記事
Comments
TrackBacks
Feed
Powered by