Windows Vista以降では、PowerShellが標準搭載されています。
慣れてくると、コマンドプロンプトよりもPowerShellの方がいろいろ便利です。とりあえず、うっかりlsと打っても大丈夫なのが一番重要。
ただし、起動手順は
・コマンドプロンプト: Windows + R → cmd
・PowerShell: Windows + R → powershell
このように、powershellと打ち込むのがめんどくさいですね。
そこで、ファイル名を指定して実行のショートカットに追加してしまいましょう。
C:/Users/baba/shortcuts などのフォルダを作り、その中にPowerShellへのショートカット「ps」という名前で作ります。
ps → C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe
後は、環境変数のPATHにC:/Users/baba/shortcuts を追加すればOKです。

環境変数のPATHを設定
これで、Windows + R → ps でPowerShellが開くため、コマンドプロンプトを使う機会が減りそうです。
ショートカットを作成する際、作業フォルダを指定できるのもポイントですね。
もちろん、PowerShell以外にもショートカットおき放題なので、ランチャーいらずです。
バージョン情報と一口にいっても、実行ファイルのバージョン、DLLのバージョン、ClickOnceやインストーラのバージョンなど様々です。
バージョン情報ダイアログを作るために、これらのバージョンの取得方法を書いてみます。といってもコードで。
/// <summary>
/// ClickOnceで設定されたバージョンを取得
/// </summary>
public static Version ClickOnceVersion
{
if (!System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
{
return null;
}
return System.Deployment.Application.ApplicationDeployment
.CurrentDeployment.CurrentVersion;
}
/// <summary>
/// 実行中のexeファイルのバージョンを取得
/// </summary>
public static string AssemblyVersion
{
return System.Windows.Forms.Application.ProductVersion;
}
/// <summary>
/// 実行中のexeファイルと同一ディレクトリにあるDLLの情報を取得
/// </summary>
public static List<System.Diagnostics.FileVersionInfo> DllVersion
{
var versions = new List<System.Diagnostics.FileVersionInfo>();
//自身のファイルパスを取得し、同一ディレクトリのdllファイルを一覧する
string path = System.IO.Path.GetDirectoryName(
System.Windows.Forms.Application.ExecutablePath);
foreach (string name in System.IO.Directory.GetFiles(path, "*.dll"))
{
System.Diagnostics.FileVersionInfo info =
System.Diagnostics.FileVersionInfo.GetVersionInfo(name);
versions.Add(info);
}
return versions;
}
このような感じで、バージョン情報ダイアログが作れそうです。
※DLLのバージョン取得はもう少し工夫しないと問題がありそうですが・・・
C#等のアプリで、自身がClickOnceでインストール・実行されているかをチェックするには、
System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed
を調べます。
しかしこのプロパティ、普通に起動するとfalseが取得できますが、Visual Studioから起動するとなぜかフリーズすることがあります。ありました。
この場合は、ClickOnceアプリの実体が保存される C:/Users/ユーザ名/AppData/Local/Apps/2.0 を削除して、コンピュータを再起動すると直るようです。直りました。
起動プロセスが複雑になるとたまに面倒ですね。
プログラムをインストールする際などは、管理者権限が必要です。
どういう環境依存だかわかりませんが、
ActiveDirectoryでUAC無効の環境で一般ユーザとしてログインしている状態で
プログラムを右クリック→管理者として実行 しても、無視されて一般権限で実行されてしまいました。
この場合は、Shiftキーを押しながら右クリックして、「別のユーザをして実行」をすれば、管理者のログインIDを入力して実行できます。
もちろん、コマンドプロンプトで「runas /user:administrator」を使っても良いですが、コントロールパネルの項目(.msc)などはこれで開けない場合もあるので、両方覚えておけば便利です。
ActiveDirectory環境で、一般ユーザがクライアントPCでパスワードを変更するには、Ctrl+Alt+Deleteを押します。
ここでパスワードの変更を選べばパスワードが変更できるはずですが、
パスワードを変更できませんでした。新しいパスワードとして指定された値は、パスワードの長さ、複雑さ、または履歴に関するドメインの要件を満たしていません。
と言われてしまうことがあります。
この場合は、以下を試してみます。
「Windows2008」などの、複雑さの要件を満たすパスワードを入れてみる
これでOKなら、グループポリシー「パスワードは複雑性の要件を満たす必要がある」が原因です。
嫌なら、これを無効にします。
これでもだめなら、「パスワードの変更禁止期間」が邪魔をしている可能性があります。
デフォルトでは、1週間程度のパスワード変更禁止期間が設定されていて、1日2回変更しようとすると上記のエラーが出るようです。
Default Domain Policyなどで「パスワード変更禁止期間」を0日に設定すれば直りそうです。
どういうわけだか、パスワードのポリシーだけはドメインコントローラーのポリシーが適用されることもあるような、そんな挙動をするので、Default Domain PolicyとDefault Domain Controller Policyの両方で
・パスワード変更禁止期間 → 0日
・パスワードの履歴を保存する → 無効
と設定しておくと良いと思います。
もちろん、ユーザの設定で「ユーザはパスワードを変更できない」にチェックが入っていないか確認し、gpupdate /force を実行するか再起動しておく必要があります。
数年前に作ったミニアプリを公開してみました。
WinBottom
ウィンドウの最小化ボタンを右クリックすると、そのウィンドウが背面に移動するだけの常駐ソフトです。
くだらないですが、大型ディスプレイでは地味に便利です。
アイコンが猫の手なので、おすすめです。
極小なのでほとんど何も書いていないですが、もしソースが欲しい等の変な方がいたらご連絡ください。
ClickOnceはMSI配布に比べていろいろな制限があります。
・ショートカットを自由に作成できない
・すべてのユーザに向けたインストールができない
しかし、一般ユーザ向けに配布するに当たり、自動アップデートの機能は魅力的ですね。
ClickOnceでちょっと困った点の解決方法をメモしておきます。
依存ファイルを一緒に配布する
依存するDLLなどの一緒に配布する必要がある場合、そのファイルをソリューションエクスプローラでプロジェクトに追加し、ビルドアクションを「コンテンツ」、出力ディレクトリを「常にコピーにする」に設定します。
これで、実行ファイルのディレクトリにファイルがコピーされます。
デスクトップにショートカットを作成する
無理なので、初回起動時にプログラムから作成するしかないようです。
何回もパブリッシュしているうちに、エラーが出て起動できなくなった
C:/Users/ユーザ名/AppData/Local/Apps/2.0 フォルダに実行ファイルの実体が保存されます。
これを削除すると、インストールできるようになりました。
WindowsをActiveDirectoryに参加させると、コントロールパネルの「ユーザアカウント」が変わります。
ActiveDirectoryのユーザを追加する際は、サーバ上で設定すれば良いのですが、各PCのローカルユーザを追加するときにちょっと戸惑います。
ダメなパターン
「ユーザアカウント」を開くと、「追加」ボタンがあるので、それを押してみると・・・

ユーザアカウント一覧画面

追加

権限の設定

完了を押すと・・・
このように、エラーになってしまいます。
この画面は、既に存在するユーザにグループを設定することは出来ますが、新規ユーザの作成ができません。
正しいやり方
「ユーザアカウント」の「詳細設定」タブで、「ユーザ管理の詳細設定」を開きます。

詳細設定を選択
出てきた画面で、右クリックして「新しいユーザー」をクリックします。

新しいユーザの追加
ダイアログにユーザ情報を入力すれば、ユーザが追加できます。
「作成」をクリックしても何もおきないように見えますが、連続追加出来るように画面が閉じないだけで、ちゃんと追加されています。

ユーザ情報の入力
これで、ローカルユーザが追加出来ました。もちろん、管理者権限のあるアカウントでログインしていることが必要です。
わかりにくいですね。
どっちだよ!って思いますよね。ふつう。

問題が発見されま...
ここで
・日本語
・Windows
・フォント
どれの責任と思うかで、性格診断ができます。
Windows 7 アップグレード版をインストールする際、すでにHDDにWindowsが入っている場合、アップグレードインストールでも新規インストールでも問題なく行えます。
しかし、HDDを交換した場合など、Windowsが入ったHDDが接続されていない場合、プロダクトキー入力のところで弾かれます。

「プロダクトキーが有効ではありません」と表示される
Windows 7では、通常版とアップグレード版でプロダクトキーが分かれており、アップグレード版の場合は、インストール時に既に何らかのWindowsがHDD内に存在することが条件になっています。
ライセンス上、古いWindowsの正規ライセンスを保持していれば問題ないはずなので、若干不親切な仕様ですね。
逆に、入っているWindowsがライセンスを持っているかどうかは判定されないので、いったんプロダクトキーを空で入力して、その後アップグレードインストールし直せば、プロダクトキーは受理されます。もちろん、正規ライセンスを持っている状態でやってください。
・・・とここまで書いて気がついたんですが、Vistaの時も全く同じことやっていましたね。
せめて、エラーメッセージを「このプロダクトキーでは新規インストールできません」としてくれると、混乱を減らせると思うんですが。