...

C-1 - ITmedia

by user

on
Category: Documents
14

views

Report

Comments

Transcript

C-1 - ITmedia
C-1
アプリケーションの Windows 8 への移行
このセッションの範囲
Agenda
既定の .NET Framework
アプリケーションをインストールしようとしたら、
「OS のバージョンが違います」
というメッセージが表示されました
現象と原因
 現象
 アプリケーションのインストール時・起動時に、
OS のバージョンが異なる旨のメッセージが表示され終了する
 原因
 Windows 8 の内部バージョンは 6.2
 バージョン管理 API は「6.2」を返す
GetVersion
GetVersionEx
 アプリケーションで「特定の OS のバージョンかどうか」のみを
確認している場合失敗する
問題への対応
 VersionLie Shim を使用する
 Win7RTMVersionLie
 VistaSP2VersionLie
 WinXPSP3VersionLie
 Shim が適用されているかどうかを確認する方法
 イベントビューアー
 [アプリケーションとサービス ログ]
¥Microsoft
¥Windows
¥Application-Experience
¥Program-Telemetry
解決策
 適切なバージョンチェックをおこなう
 「特定のバージョン以上かどうか」を確認する
 VerifyVersionInfo Win32 API を使用する
 OS のバージョンではなく機能を検索する
アプリケーションをインストールしようとしたら、
フォルダへのアクセスが拒否されました
現象と原因
 現象
 デスクトップアプリケーションを以下のフォルダにインストールしようとすると、
アクセスが拒否される
 Program Files¥WindowsApps
 ウィルス/マルウェア検出ツールで、以下のフォルダが問題の発生源になる
場所と見なされる
 Program Files¥WindowsApps
 原因
 WindowsApps は、Metro Style アプリのインストールフォルダのため、
アクセスは拒否される
解決策
 アプリケーションのインストール先として、WindowsApps フォルダを
ハードコードしない
 ウィルス/マルウェア検出ツール
 ベンダーがヒューリスティックを更新し、 WindowsApps を検出場所に
指定しない
.pdf ファイルをダブルクリックすると、
Windows Reader で表示されます
現象
Adobe Reader を
インストールすると
PDF ファイルの
”既定の候補”になる
PDF ファイルの
既定のアプリケーションは
Windows Reader
ユーザーが既定の
アプリケーションを選択
原因
 プログラムで既定のアプリケーションを設定することはできない
 インストーラで既定のアプリケーションとして設定している場合
→ 既定の候補となるのみ
 既定の候補が複数存在する場合
 アプリケーション起動時にユーザーに通知
問題への対応
 ユーザーによる既定のアプリケーションの設定
 [コントロール パネル]
-[ファイルの種類またはプロトコルのプログラムへの関連付け]
 Windows エクスプローラー
解決策
 IApplicationAssociationRegistration の以下のメソッドを使用しない
メソッド
QueryAppIsDefault /
QueryAppIsDefaultAll
QueryCurrentDefault
SetAppIsDefault / SetAppIsDefaultAll
説明
アプリケーションが既定であるかどうか
既定のアプリケーションのプログラム ID の取得
既定のアプリケーションを設定
 IApplicationAssociationRegistrationUI::LaunchAdvanced
AssociationUI メソッドを使用する
 コントロールパネルの既定のプログラム設定を表示
Web サイトへのリンクをクリックしたら、
IE が全画面で表示されました
現象
 デスクトップアプリケーションから Web アドレスにアクセスしたとき、
Metro Style のブラウザーが起動し、起動元のアプリケーションが
見えなくなることがある
既定の Web ブラウザーが
デスクトップアプリ
既定の Web ブラウザーが
Metro スタイル アプリ
原因
 Windows 8 では 2種類の ブラウザーが存在する
 デスクトップアプリケーション
 Metro Style アプリ
 アプリケーションから Web アドレスにアクセスした場合、
既定の ブラウザーが起動される
問題への対応
 エンド ユーザーによる対応のみ
 [インターネット オプション] でリンクの開き方を選択する
 常に Internet Explorer で
 常にデスクトップ上の Internet Explorer で
 Internet Explorer で自動的に判定する
 Web ブラウザーを画面の端にスナップする
 Web ブラウザーとアプリケーションを
両方同時に表示できる
[互換性] タブに
[デスクトップコンポジションを無効にする]
オプションがありません
現象
 Windows 8 では、[互換性] タブに
[デスクトップコンポジションを無効にする] オプションがない
Windows 7
Windows 8
ない!
原因
 Windows 8 では、デスクトップコンポジションを無効にできない
 デスクトップコンポジションのサポート
 Windows Vista / 7
 Aero グラステーマ使用時のみ有効
Windows フリップ / DPI スケール / サムネイルプレビュー / 全画面表示の拡大鏡 が使用可能
デスクトップコンポジションの有効/無効に応じたコード記述が必要
 Windows 8
 すべてのテーマで有効
Aero グラステーマ以外でも各種エクスペリエンスが利用可能
デスクトップコンポジションに有効/無効に応じたコード記述が不要
解決策
 アプリケーションでデスクトップコンポジションを無効にするコードを
呼び出さない
 DwmEnableComposition API
 呼び出しは成功するが、無効化されない
 「デスクトップコンポジションを無効にする」Shim を使用しない
 Windows 8 では廃止されている
プロジェクターに画面表示できません
現象
 DX9 グラフィックパーツを使用している場合、以下の問題が発生する
 IEで複雑なグラフィックを含む Web ページを閲覧するとパフォーマンスが
低下する
 複数のモニターやプロジェクターが使えない
 休止状態はサポートされるが、スリープにはならない
 画面の解像度を変更できないことがある
原因
 Windows 8 では、DX9 グラフィックパーツはサポートされない
 ドライバーの更新なし
 Vista 対応のドライバーを利用すると問題が発生する
 Microsoft Basic Display Driver が使用される
 Internet Explorer 10 ではソフトウェアレンダリングがおこなわれる
問題への対応
 検証し、問題があることが判明した場合、以下のとおり対応する
 アプリのハード要件から除外する
 マニュアルに警告を載せる
アプリケーションを Windows 8 ネイティブ モードで
実行したい
解決策 (1)
 アプリケーション マニフェストの Compatibility セクションで想定した
Windows のバージョンを指定
 そのバージョンに応じたモードで動作する
 設定がない場合は Windows Vista モードで実行
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<!-- 新しく追加されたCompatibility セクション -->
<!-- 名前空間は Compatibility.v1-->
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!--Windows Vista に対応: スイッチバック コンテキストの既定値 -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!--Windows 7 に対応: Windows 7 モードで動作-->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!--Windows 8 Consumer Preview に対応: Windows 8 Consumer Preview モードで動作-->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
</application>
</compatibility>
</assembly>
解決策 (2)
 Compatibility セクションを設定した場合の動作
項目
Windows 8 Consumer
Preview
Windows 7
Windows Vista
RPC の既定スレッド プール
NT スレッド プール
NT スレッド プール
プライベート スレッド プール
DirectDraw の Lock API によるプライマリデスクトップ
ビデオバッファーのロック
不可
不可
可
DirectDraw のクリッピングウィンドウなしでプライマリ
デスクトップビデオバッファーへのビットブロック転送
不可
不可
可
GetOverlappedResult API の複数回呼出しでの競合
競合は解決される
競合は解決される
競合は解決されない
ハイ コントラスト モードでのシェル テーマのステータス
テーマ設定状況が返される
テーマ設定できないことが
通知される
テーマ設定できないことが
通知される
IPersistFile ハンドラー呼出しへの相対パスの使用
呼出しに失敗する
続行する
続行する
プログラム互換性アシスタント (PCA)
PCA による軽減策は適用
されない
PCA による互換性問題が
追跡される
PCA による互換性問題が
追跡される
ハイコントラストモードを設定すると、
文字が消えました
現象
 アプリケーションでハイコントラストモードに設定できない
 ハイコントラストモードにすると、一部の文字が見づらくなったり、
画像が正しく表示されない
原因 (1)
 クラシック モードが削除され、ビジュアルスタイルが設定された
ハイ コントラスト テーマに置き換えられた
原因 (2)
 アプリケーション マニフェストで <supportedOS> が Windows 8 に
設定されていない場合、アプリケーションでのテーマ設定が正しく
反映されない
 アプリケーション全体がクラッシック テーマのハイ コントラスト モードで描画される
 アプリケーションの非クライアント領域とクライアント領域の両方で、
ハイ コントラスト テーマの設定は無効になる
 アプリケーション マニフェストで <supportedOS> が Windows 8 に
設定されている場合でも、ハイコントラストテーマが正しく表示されない
場合がある
 描画用のビジュアルスタイルを使用していない場合
 アプリケーションで色や画像をハードコーディングしている場合
問題への対応
 コントロール パネルでハイ コントラスト テーマの UI コンポーネントを
カスタマイズする
解決策
 アプリケーション マニフェストに Windows 8 の <supportedOS> タグを
含める
 文字色をハードコードしない
 オーナー描画コントロールの正しい描画のために MSDN に準じる
 http://msdn.microsoft.com/en-us/library
/dd373487(VS.85).aspx
 WM_ThemeChange イベントのメッセージ ハンドラーを追加する
 アプリケーションがテーマから取得した色をキャッシュする場合
 標準ではない色を適用する場合
Metro Style アプリをアクセシビリティ対応
するにはどうすればよいですか?
解決策
 Metro Style アプリの読み取り・オートメーション
 UIA (UI オートメーション) のみサポート
 MSAA (Microsoft Active Accessibility) はサポートしない
 Metro Style アプリのアクセシビリティデータ提供
 UIA サポート
 推奨
 MSAA サポート
 UIA-to-MSAA プロキシが使用される
 完全互換ではないため、MSAA の詳細にアクセスできない
サービスの状態がタスクトレイに反映されません
現象
 以下の通信が失敗する
 セッション 0 とセッション 1以上のプロセス間通信
 ユーザーモードとドライバーのコンポーネント間通信
原因 (1)
 Windows 8 の電源オプション
 スリープ
 電源状態が変化するとき、OS から WM_POWERBROADCAST が送信される
 すべてのシステムアクティビティが中断
スリープ中は
どちらも中断
原因 (2)
 Windows 8 の電源オプション
 接続維持スタンバイ
 スマートフォンのような電源管理
 Metro Style アプリ
ライブタイルの更新や新着メールのダウンロードは行われる
 デスクトップアプリケーション
Desktop Activity Moderator (DAM) により管理
接続維持スタンバイ中は
基本的に中断
接続維持スタンバイ中も
必要に応じて実行
原因 (3)
 Desktop Activity Moderator (DAM)
 セッション1 以上のプロセス
 接続維持スタンバイ中は中断
 セッション0 のプロセス
 接続維持スタンバイ中も必要に応じて再開
→セッション 0 のプロセスが動作していて、
セッション 1 のプロセスが中断しているときがある
解決策
 アプリケーションがウィンドウ (HWND) を保持している場合
 DAM による中断・中断解除時にも、WM_POWERBROADCAST が
送信される
 アプリケーションで WM_POWERBROADCAST をトラップする
中断:PBT_APMSUSPEND / 中断解除:PBT_APMRESUME
 ただし、あらかじめ通知を要求しておく必要がある
RegisterSuspendResumeNotification API
• パラメータ:DEVICE_NOTIFY_WINDOW_HANDLE / ウィンドウの HWND
 アプリケーションがウィンドウ (HWND) を保持していない場合
 コールバックを指定
 PowerRegisterSuspendResumeNotification API
パラメータ:DEVICE_NOTIFY_CALLBACK
問題への対応
 問題への対応
 PromoteDAM shim を適用することで、WM_POWERBROADCAST メッ
セージを受信可能
スタートアップ アプリケーションが
動いていないようです
現象と原因
 現象
 スタートアップアプリケーションが動作していないことがある
 スタートアップ アプリケーションの設定
 Run レジストリキー
 RunOnce レジストリキー
 スタートメニューのスタートアップフォルダー
 原因
 ユーザーはタスク マネージャーを通じてスタートアップ
アプリケーションを無効にできる
 低消費電力 / PC の応答性の向上を
実現するため
解決策 (1)
 スタートアップアプリケーション以外の実装検討する
 推奨される実装方法
解決策(2)
 スタートアップアプリケーション以外の実装検討する
 推奨される実装方法
解決策(3)
 スタートアップアプリケーション以外の実装検討する
 推奨される実装方法
解決策(4)
 定期的なバックグラウンドアクティビティは自動メンテナンスとして
定義可能
XML によるタスクの作成
 タスク定義のスキーマ:
http://msdn.microsoft.com/library/aa383609(v=VS.85).aspx
 タスク スケジューラに含まれる、ビルトインのコマンドライン ツール (schtasks.exe) を
使用し、XML 形式のタスク定義をインポート
Schtasks.exe /create /tn <タスク名> /xml <XML ファイル名>
C 言語によるタスクの作成
解決策(5)
 タスク作成の検証
 タスク定義をファイルにエクスポートして、タスク定義が目的に沿っていることを
確認
 Schtasks.exe /Query /tn タスク名 /xml ファイル名
 タスク実行の検証
 タスクを起動し、タスク スケジューラ (taskschd.msc) の UI で
タスクが実行されていることを確認
 Schtasks.exe /Run /tn タスク名
既定の .NET Framework
.NET Framework 3.5 のアプリケーションが
起動しません
現象
 .NET Framework 3.5 アプリケーションケーションをインストール
または起動すると、 .NET Framework 3.5 のインストールが要求される
インストーラーを起動した場合
直接配置して起動した場合
原因
 Windows 8 をクリーンインストールすると、.NET Framework 3.5 は
有効化されない
 Windows 7 からのアップグレードでは、既定で .NET Framework 3.5 が
有効化される
解決策 (1)
 .NET Framework 3.5 を有効化する
 Windows Update によりインストール
 再頒布可能パッケージをインストール
 アプリケーションのセットアップパッケージに.NET Framework 3.5 を含める
解決策 (2)
PC台数が少ない
 .NET Framework 3.5 を有効化する
 OS の ISO イメージ から ¥sources¥sxs フォルダをコピー
xcopy e:¥sources¥sxs¥*.* c:¥dotnet35 /s
 管理者権限で、Dism コマンド を実行
Dism.exe /online /enable-feature /featurename:NetFX3 /All /Source:c:¥dotnet35 /LimitAccess
PC台数が多い
 .NET Framework 3.5 を有効化する
 OS の ISO イメージ から ¥sources¥sxs フォルダをコピー
xcopy e:¥sources¥sxs¥*.* c:¥dotnet35 /s
 レジストリ キーを設定
HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Windows¥CurrentVersion¥Policies¥Servicing
“LocalSourcePath”=”c:¥dotnet35”
VB6 アプリケーションは使えますか?
解決策
 VB6 ランタイムは Windows 8 でもサポート
 VB6 IDE に含まれる主要なコントロールやライブラリもサポート
 注意事項
 VB4、VB5 およびサードパティ製ライブラリはサポートされない
 32bit ランタイムのみ提供
 64bit OS 上では WOW 経由で実行
 Visual Basic 6.0 IDE はサポートされない
 カスタムサポート契約を結んでのサポートは可能
[コントロールパネル]-[システムとセキュリティ] に、
[バックアップと復元] がありません
現象と原因
 現象
 コントロールパネルの [システムとセキュリティ] から、[バックアップと復元] が消えている
 原因
 [バックアップと復元] は廃止される予定
 Windows 8 Consumer Preview では [ファイル履歴] に置換え
 [ファイル履歴] と [バックアップと復元] を同時に使用しない
 [ファイル履歴] はアクティブなバックアップ スケジュールの存在を確認し、存在する場合はスケジュールを有効化
できないようにする
問題への対応と解決策
 問題への対応
 [バックアップと復元] 機能へのアクセスに言及したドキュメントを変更する
 解決策
 [バックアップと復元] を起動するアプリケーションを修正する
 [ファイル履歴] が有効なら、ユーザーがどちらかを選択できるようにする
Metro Style アプリで使用できない
IME があります
現象と原因
 現象
① Metro Style 環境
 IME 選択のフライアウトでグレー表示される IME がある
② デスクトップ環境
 Windows 7 の言語バーに依存する IME が正しく動作しない
 原因
① Metro Style 環境
 Metro Style対応 IME が必要
対応していない IME はグレーアウトされる
② デスクトップ環境
 入力インジケーターの構成の変更
 IME 商標アイコンで入力方式を切り替え
 IME モードアイコンで別の IME モードに切り替え
問題への対応
① Metro Style 環境
 Windows 8 IME (Metro Style 環境対応) を使用
② デスクトップ環境
 レガシー IME を使用することができる
 レガシー / 非認定の IME の使用中止を推奨
 IME がWindows 7 仕様に依存している場合
 IME 商標 アイコンと IME モード アイコンを Windows 8上 の
入力インジケーターで表示するための変更が必要
解決策
 Metro Style アプリ対応 IME の開発
 ハードウェアキーボードだけでなくタッチキーボードも
サポートする必要がある
 Windows 8 Consumer Preview IME ガイドラインに従う
 違反している場合、Windows Defender によりシステムから取り除かれる
 デジタル署名をおこなう
 署名されていない IME をダウンロードしようとしたときの警告メッセージ
 TSF (テキストサービスフレームワーク) に準拠する
Windows Server 2012 でのみ発生する問題は
ありますか?
プロトコルやファイルシステムの新機能
 プロトコルやファイルシステムの新機能
 SMB (Server Message Block)3.0
 ReFS (Resilient File System)
 CSVFS (Clustered Shared Volumes)
 問題
 サポートされない API がある
 Windows Server 2012 で廃止された API がある
 解決策
 サポートされている API を確認する必要がある
 「Application Compatibility and API Support for SMB 2.2, CSVFS, and ReFS」
http://www.microsoft.com/en-us/download/details.aspx?id=29043
マルチパス I/O の拡張 SRB サポート
 マルチパス I/O (MPIO) は拡張 SRB (STORAGE_REQUEST_BLOCKS) を
サポートする
 デバイス固有モジュール (DSM) でも拡張 SRB を使用可能
 ただし、マルチパス デバイスの記憶域スタックで拡張 SRB を使用するには、DSM を
含むスタック内のすべてのコンポーネントが拡張 SRB をサポートしている必要がある
 DSM も含め、デバイスの記憶域スタックの一部が拡張 SRB をサポート
していない場合、記憶域スタックはレガシ SRB (SCSI_REQUEST_BLOCK) を
使用する
 対応方法
 DSM で拡張 SRB をサポートするための MPIO 要件
 サポートされる DSM のタイプが DsmType6 である
 DSM が DSM_ADDRESS_TYPE_SUPPORTED 機能を提供する
皆様へのお願い
今から Windows 8 / Windows Server 2012 への準備を!
現在のアプリケーションの
での検証
開発者向けリソース一覧
Windows 8 Consumer Preview
http://windows.microsoft.com/ja-JP/windows-8/consumer-preview?SignedIn=1
Windows Server 2012 Beta
http://technet.microsoft.com/ja-jp/evalcenter/hh670538
Visual Studio 11 Beta
http://www.microsoft.com/japan/msdn/vstudio/save/
Windows Developer Center
http://msdn.microsoft.com/ja-jp/windows/
Windows 8 Consumer Preview and Windows Server 8 Beta Compatibility Cookbook
http://www.microsoft.com/download/en/details.aspx?id=27416
Fly UP