Windowsアプリケーションを作成したが、Windows7だけ想定の動きをしてくれず、大変困りました。
その時の覚書きです。
前提条件
- visual studio 2015で開発
- 言語はC#
- Windows フォームアプリケーション
- 対象OS
- Windows7
- Windows8
- Windows10 - 確認環境
- Windows7(modern.ie)
- Windows8.1(modern.ie)
- Windows10(実端末)
Windowsアプリの内容
Windowsアプリ内でコマンド(schtasks)を実行し、タスクスケジューラにタスクを登録/削除/クエリしている
困ったこと
1.権限の問題
問題
schtasks /delete コマンドが実行エラーになる。
原因
Windows7端末だけ管理者権限が必要。
対処内容
アプリケーションの実行時、管理者に昇格(requiredAdministrator)して実行するよう変更する。
<requestedExecutionLevel level = "requireAdministrator" uiAccess="false" />
2.コマンド差異の問題
問題
schtasks /query /tn "タスク名" /v /fo csv /nh がエラーとなる。
エラー: /NH スイッチは LIST形式では使用できません
原因
Windows7だけ、CSV形式で/nhオプションが使えない。(どうしてかは不明)
対処内容
/nhオプションを外し、1行目を読み飛ばすことで対応
3.言語環境の問題
問題
日本語のタスク名が????に文字化けする
原因
コマンドプロンプトの言語コードがIBM437になっているため。(chcpで確認)
ただし、これは仮想マシン固有の問題かもしれない。(未確認)
対処内容
言語コードを932(Shift-jis)に変更してもInvalid code pageのエラーとなり変更ができなかった。
そこで以下2つを実行。
(1) まずは、こちらの記事を参考に日本語環境を設定する。
「modern.IEのWindows 7で日本語の表示と入力をできるようにする」
(2) 次に、システムロケールを英語から日本語へ変更する。
「[Windows7でcmd.exeを日本語化させる]
(http://sugamasao.hatenablog.com/entry/20120103/1325605600)」
この段階でchcpを実行すると、無事932になっていた!