Archive for 3月, 2010

Skype 4.2にしたらタスクバーから消えなくなった(Windows7)

4.1の頃は×ボタンを押したり「閉じる」を選択するとタスクバーに最小化されていたSkypeですが、4.2にアップデートしたら最小化されずタスクバーに居残ってしまうようになりました。ちなみにOSはWindows7(32bit)

結論から言うと、互換モード(Vista SP2)で起動するよう設定すると問題なく動作します。

  1. 「コンピューター」→「ローカルディスク(C:)」→「Program Files」→「Skype」→「Phone」と進み、スカイプのアイコン(Skype.exe)を右クリックして「プロパティ」を選択
  2. 「互換性」のタブを選択し、「互換モード」のくくりにある「互換モードでこのプログラムを実行する」のチェックボックスをオンにし、その下のプルダウンリストから「Windows Vista (Service Pack 2)」を選択する
  3. 「OK」を押してプロパティウィンドウを閉じる
  4. 通常通りSkypeを立ち上げ、タスクバーに最小化される事を確認する

以上です。

ネタ元はここ。
How to Minimize Skype to Windows 7 System Tray (Notification Area)
http://www.mydigitallife.info/2010/01/23/how-to-minimize-skype-to-windows-7-system-tray-notification-area/

今回の敗因は、メジャーリリース公開時に自動的にダウンロード&インストールする設定になっていた事ですね。
「設定」→「詳細」で速効オフ(通知のみ)にしておきました。
ってか今さらWindows7互換がらみのバグってなにさ。頼むよSkypeさん。

 

InfoPathの日付形式はyyyy-MM-ddです

InfoPathでは、フィールドに入力されたデータは、そのフィールドの「データ型」に設定された表示形式に変換された上で表示されます。例えば日付型(date)に設定されたフィールドに「2010/03/12」と入力すると「2010年3月12日」と表示されます。また、データ型に適合しないデータが入力されると、該当フィールドが赤枠で表示され「日付のみ指定してください」といったデータの修正を促すメッセージが表示されます。

これはこれで便利な機能なのですが、実際のXMLフィールドに格納される生データの書式がわからないという落とし穴も生じます。これが問題になるのはVSTAを使ってVBやC#で記述されたプログラムからフィールドに直接データを入力しようとする場合で、例えば日付データ型で表示形式が「yyyy/MM/dd」と定義されたフィールドに「2010/03/12」というデータを入れると「日付のみ指定してください」というエラーメッセージが表示されてしまいます。原因はInfoPathでは日付データを ISO形式(yy-MM-dd)という形式で格納するため、これ以外のフォーマットのデータは全てエラーとして認識してしまうのです。

そのフィールドの「見た目」を表示形式ではなく、InfoPathで定義されているデータ型の記述フォーマットに厳密に適合した形式で入力してあげる必要がある、というのがミソです。まあ文字列型に数字入れてもエラーにはならないので、ハマるとしたら確実に日付関連のフォーマットぐらいでしょうか。私は見事にそれにハマったわけですが。

フォーマットさえ分かれば、後はこんな↓感じで簡単なコードだけで変換する事が出来ます。

日付の場合:
string todaysDate = DateTime.Today.ToString(“yyyy-MM-dd”);

日付と時刻の場合:
string todaysDateAndTime = DateTime.Today.ToString(“yyyy-MM-ddThh:mm:ss”);

下記のドキュメントにDateの形式に関する情報がちょろっと確認できます

Date のメンバ
http://msdn.microsoft.com/ja-jp/library/microsoft.office.interop.InfoPath.semitrust.date_members.aspx

ただし上記のMicrosoftの公式ドキュメントにもあるように、この形式は共通言語仕様(CLS)には準拠していないため、たとえばこのデータを別システム(DBなど)に渡そうとする場合は再度データフォーマットの変換が必要になります。特に日付と時刻の型(YYYY-MM-DDThh:mm:ss)は、そのままMicrosfot SQL Serverのdatetime型フィールドに突っ込むとエラーになる(涙)ので、こんな感じで書式を再変換してやる必要があります

SQLServerのdatetime型に変換する
string todaysDateAndTime = DateTime.Parse(todaysDateAndTime).ToString();

しっかしInfoPath情報少ないですね、、、

 

Windows Server 2008で休止状態を無効にする

いつの間にかサーバの空き容量が20%を切っててびっくり。
調べたらpagefile.sysとhiberfil.sysだけで20GB近く食ってる。ページングファイルは別としてもハイバネーションはいらんだろ。サーバーをサスペンド状態にしておく運用ってなにさ。

コントロールパネル内にある電源オプションから変更できるのかとおもいきや、実はコマンドラインで設定する必要があるとのこと。Vista以降そうなったらしいのだけれど、そうだったかなあ。

powercfg.exe /hibernate off で無効
powercfg.exe /hibernate on で有効

いつもどおりマイクロソフトの仕様です。

Windows を実行しているコンピューター上で休止状態を無効にする方法および再度有効にする方法
http://support.microsoft.com/kb/920730/ja

  1. [スタート] ボタンをクリックし、[検索の開始] ボックスに「cmd」と入力します。
  2. 検索結果の一覧で、[cmd] を右クリックし、[管理者として実行] をクリックします。
  3. ユーザー アカウント制御からメッセージが表示される場合は、[続行] をクリックします。
  4. コマンド プロンプトで、「powercfg.exe /hibernate off」と入力します。
  5. 「exit」と入力し、Enter キーを押します。

念のためサーバは再起動させました。必要なかったかもしれないけれど、念のため。

 

ネットワークドライブにSQL Server エージェントのタスクはアクセスできない

結論から言うとUNC (\\サーバ名\フォルダ名)でアクセスしなさい、という事です。

もくろんでいたのは、別システムがsambaの共有ディレクトリ上に定期的に吐きだすテキストデータを、SSISパッケージ化したタスクで取得&データベースに取り込むというシナリオでした。その際にsambaの共有ディレクトリをQ:ドライブにマップして「Q:\hogehoge\Datafile.txt」という形式でアクセスしてやれと。

ところがSSISタスクを作成し手動で実行すると問題なく動作するのに、SQL Serverエージェントの定期ジョブに登録&実行するとエラーで停止してしまうんです。その際に表示されるエラーはこんな感じで、なんというか、決して親切ではないですね。

開始: xx:xx:xx
エラー: 20xx-xx-xx xx:xx:xx.xx
コード: 0xC002F304
ソース: ファイル システム タスク ファイル システム タスク
説明: エラーが次のエラー メッセージで発生しました: “パスの一部が見つかりません。”。 エラー終了
DTExec: パッケージの実行から返されました DTSER_FAILURE (1)。

試行錯誤の末、ローカル上に置いたファイルであれば問題ない事が判明。ネットワーク経由でのファイルアクセスが原因だという事になり、アクセス権限やらSSISパッケージのProtectionLevelの変更やら、いろいろ試したけど全部ダメ。

結局ネットワークドライブがそもそも使えねんじゃね?という結論にたどり着きました。
Windows Server 2000の関連資料としてこんな記述を見つけましたが、Windows Server 2008でも同じ現象が起きます。

ネットワーク ドライブの削除、再利用ができない
http://support.microsoft.com/kb/417903/ja

上記資料の「原因」の欄にある「SMB (Server Message Block)セッションは、ログオンとユーザー アカウント毎に管理されます。」というのがすべてを物語っています。つまりドライブレターの割り当ては、アカウント固有というわけではなくアカウントかつそのセッション固有のものである、と。

探してみたら同じような事しようとしてハマった人を発見。
フォーラムとはいえ、回答者によって「できる」「できない」で真っ二つに分かれているのがなんとも。
今回の件でいえば「ちゃっぴ」さんが正解です。

ネットワークドライブへのバックアップ
http://social.msdn.microsoft.com/Forums/ja-JP/sqlserverja/thread/d81f3dbc-9235-45e4-9743-2f854e5647d9