プログラムをインストールする際などは、管理者権限が必要です。
どういう環境依存だかわかりませんが、
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 を実行するか再起動しておく必要があります。
ActiveDirectoryを使う環境では、DNSサーバがSRVレコードをサポートしている必要があります。
(通常のDNSだとDomainControllerを検索する際にエラーになってしまいます)
BINDなどのDNSサーバで設定することも可能ですが、かなり面倒なので、Windows ServerをプライマリDNSにしてしまうのが手っ取り早いですね。
ところが、Windows ServerをプライマリDNSにしているActiveDirectory環境で、LANから公開サーバを検索しようとしたら、少しだけ困ったことになりました。
公開サーバ(WAN/LANの2つのIPを持つ)の名前をwwwとすると、
DNSサーバ:192.168.1.50
公開サーバ:192.168.1.10 , 203.143.124.180
期待する結果
C:> nslookup www.bpsinc.jp
サーバー: UnKnown
Address: 192.168.1.50
名前: www.bpsinc.jp
Address: 192.168.1.10
残念な結果
C:> nslookup www.bpsinc.jp
サーバー: UnKnown
Address: 192.168.1.50
名前: www.bpsinc.jp.bpsinc.jp
Address: 203.143.124.180
このように、bpsinc.jpのサフィックスが無駄にくっついてしまいます。
これは、ネットワーク設定→TCP/IP(IPv4)設定→詳細設定→DNS で、以下のようにDNSサフィックスを手動設定すれば直ります。

ローカルでここを変更してもOK
グループポリシーで一括設定するには、コンピュータの構成→ポリシー→管理用テンプレート→ネットワーク→DNSクライアント→DNSサフィックス検索一覧 で設定すればOKです。

グループポリシーでDNSサフィックス設定
もちろん、www.bpsinc.jp. のように最後にピリオドをつければ何もしなくてもOKなのですが、
WindowsのFQDN判定はあまり賢くないということでしょうか?
数年前に作ったミニアプリを公開してみました。
WinBottom
ウィンドウの最小化ボタンを右クリックすると、そのウィンドウが背面に移動するだけの常駐ソフトです。
くだらないですが、大型ディスプレイでは地味に便利です。
アイコンが猫の手なので、おすすめです。
極小なのでほとんど何も書いていないですが、もしソースが欲しい等の変な方がいたらご連絡ください。
バージョン4になって多少は落ち着いたと思ったChromeの文字化け問題ですが、今日見たら悪化していました。

激しく酷すぎますね。使い物になりません。
WordPressのCSSに書いてあるfont指定を外せば一応直りますが、根本的な解決にはなっていません。
とりあえず見たいときは、Ctrlと-を押して画面を縮小すれば読めます。
どうにかしてほしいです。
ubuntuでmysqlを再起動する場合、
/etc/init.d/mysql restart
とやりますが、ここで
Stopping MySQL database server: mysqld failed!
とエラーが出てしまいました。
これは、mysqlを停止する際に使うdebian-sys-maintというユーザのパスワードが間違っているのが原因です。
mysqlをインストールした際、/etc/mysql/debian.cnfにランダムなパスワード(生)が保存され、mysqlデータベースのuserテーブルにハッシュ済みデータが保存されます。
ほかのmysqlサーバからデータを移行した場合など、このuserテーブルを書き換えてしまった場合に、上記現象が発生します。
mysqlのdebian-sys-maintユーザのパスワードを、/etc/mysql/debian.cnfに書いてあるものにリセットすれば、上記エラーは解決しました。
1年くらい前に社内MLに投げた、「MySQLでSET NAMESを使ってはいけない理由」をコピペしてみます。手抜きです、はい。
赤字は注釈です。
今更ながら、「MySQLで SET NAMES を使ってはいけない」の根拠のお話です。
下記のPHPスクリプトでは、入力値を元にSQL文を生成し、検索クエリを投げています。
※sqltestというDBには、カラムnameを持つuserテーブルが存在します。
GETで渡された値はきちんとmysql_real_escape_stringをかけているので、SQLインジェクションは出来ないように見えます。
しかし、
http://localhost/sqltest/index.php?name=%95%5c’%20OR%201=1%20–%20
にアクセスすると、全部のデータが見えてしまいます。
下にあるPHPスクリプトを、localhost/sqltest/index.php として配置してください。
“SET NAMES SJIS” を実行すると、MySQLのエンコードがShift-JISになりますが、mysql_real_escape_stringはUTF-8のまま動作します。
16進数で 95 5c 27 20 は、
UTF-8: (謎の文字)(バックスラッシュ)(シングルコーテーション)(スペース)
Shift-JIS: (表)(シングルコーテーション)(スペース)
になります。
mysql_real_escape_stringは、バックスラッシュとシングルコーテーションそれぞれをエスケープします。
95 5c 5c 5c 27 20
MySQLは、Shift-JISとして動作するので、 (表)(\)(\)(シングルコーテーション)(スペース) と認識します。
つまり、\が一つ余分に入ることで、入力値のシングルコーテーションがエスケープされなくなります。
マルチバイト非対応のエスケープ関数を使うのと同じ理屈で、SET NAMES は危険です。
基本的に文字コード中に5Cが入るShift-JISが危険ですが、他の文字コードでも似たようなことが起こる可能性があります。
mysql_set_charset(’SJIS’);
なら、mysql_real_escape_stringもShift-JISとして動作するようになるので、安全です。
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>SQLテストページ</title>
<head>
</head>
<body>
<form action="<?php echo $_SERVER['SCRIPT_NAME'];?>">
<input type="text" name="name" />
<input type="submit" value="search" />
</form>
<?php
//DBに接続
if (! $db = mysql_connect('localhost', 'sqltest', 'sqltest'))
{
echo 'CONNECT ERROR';
exit;
}
mysql_select_db('sqltest', $db);
mysql_query('SET NAMES SJIS');
// mysql_set_charset('SJIS');
//SQLを生成
$name = mysql_real_escape_string($_REQUEST['name']);
$sql = "SELECT * FROM user WHERE name='$name'";
echo $sql . '<br />';
//実行
if (! $res = mysql_query($sql))
{
echo "QUERY ERROR <br />";
echo mysql_error();
exit;
}
echo "<pre>";
while ($row = mysql_fetch_array($res)) {
print_r($row);
}
echo "</pre>";
?>
</body>
</html>
PHPでMySQL 5をUTF8にして使う場合、文字が全部????になってしまう問題を防ぐため、
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci
skip-character-set-client-handshake
を指定する、というのが定石になっています(よね?)。
しかし、共用サーバなどでmy.iniを編集できない場合、mysql_set_charset() などを使うと思います。
CakePHPでは、bootstrapでDB設定を読んで手動で設定するのも面倒だな、と思っていたら、さすがはCakePHP。便利な設定が。
app/config/database.php
var $default = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'baba',
'password' => 'hoge',
'database' => 'testdb',
'prefix' => '',
'encoding' => 'utf8',
);
このようにencodingを指定するだけで、勝手にSET NAMESやmysql_set_charset()を実行してくれます。便利便利。
WindowsのXAMPP環境でEthnaを使う際、Ethnaコマンドの設定でよく戸惑います。
プロジェクトの環境依存を減らすため、Ethna自体をプロジェクトのlibフォルダに入れるのが好きなのですが、そのような環境だと
- add-project で Could not open input file: ~\Ethna\bin\\bin\ethna_handle.php となどのエラー
- add-action で Fatal error: Could not redeclare class Ethna などのエラー
が出ることがあります。
私の使い方では、以下のような設定に落ち着きました。
共通の設定
phpにパスを通します。xampp/php のフォルダを環境変数のPATHで設定します。
ethna.bat があるフォルダにはパスを通さない方が良いです。
add-project をするとき
Ethnaをダウンロードして、workspaceに設置します。
workspace/Ethna/bin/ethna.bat を、workspaceにコピーします。
workspace/ethna.bat を開き、@PEAR-DIR@ を .\Ethna に一括置換します(2カ所)。
これで、コマンドプロンプトで、workspaceに入り、
C:\Users\baba\workspace > ethna add-project hoge
と実行できます。
add-action などをするとき
add-project 以外では、Ethnaのプロジェクトのディレクトリにいる必要があります。
hogeプロジェクトがある場合、workspace/hoge/lib フォルダに、Ethna(とSmarty)を設置しておきます。
workspace/hoge/lib/Ethna/bin/ethna.bat を、workspace/hoge にコピーします。
workspace/hoge/ethna.bat を開き、@PEAR-DIR@ を、 .\lib\Ethna に一括置換します(2カ所)。
これで、コマンドプロンプトでhogeディレクトリに入り、
C:\Users\baba\workspace\hoge > ethna add-action hoge_index
と実行できます。
以上で実行できますが、正直面倒なので、Eclipseプラグインを作ろうと思います。
ClickOnceはMSI配布に比べていろいろな制限があります。
・ショートカットを自由に作成できない
・すべてのユーザに向けたインストールができない
しかし、一般ユーザ向けに配布するに当たり、自動アップデートの機能は魅力的ですね。
ClickOnceでちょっと困った点の解決方法をメモしておきます。
依存ファイルを一緒に配布する
依存するDLLなどの一緒に配布する必要がある場合、そのファイルをソリューションエクスプローラでプロジェクトに追加し、ビルドアクションを「コンテンツ」、出力ディレクトリを「常にコピーにする」に設定します。
これで、実行ファイルのディレクトリにファイルがコピーされます。
デスクトップにショートカットを作成する
無理なので、初回起動時にプログラムから作成するしかないようです。
何回もパブリッシュしているうちに、エラーが出て起動できなくなった
C:/Users/ユーザ名/AppData/Local/Apps/2.0 フォルダに実行ファイルの実体が保存されます。
これを削除すると、インストールできるようになりました。