Wednesday, March 29, 2006

ServiceNotification

結局サービスからのメッセージ表示は、MessegeBox.Show()MessegeBoxOptions.ServiceNotivicationをしているすることで難なく表示できるようになった。(MSDN参照)

しかし表示がしょぼい。
ただのメッセージボックスだから仕方ないなあ。

しかしこれじゃユーザへのお知らせとしては弱い。やっぱり表示用のFormをつくるかな。
ただし通常のProcessクラスをつかっても、サービスからの起動はバックグラウンドなのでFormが表示されない。なにやらThreadを用いるという話をきいたが、まだそこまでは手が回らない。しかも締め切りはは明日だ。(涙)
当面はメッセージボックスでごまかして、着々と修正するとしよう。

# やっぱりメモリ管理が下手で無駄にアプリケーションがでかくなる...。
# .NETのRuntime環境はJavaのバーチャルマシンみたいなもんだということをようやく教えてもらった。

Tuesday, March 28, 2006

しまった...リモートフォルダ

あああ...

どうもファイルオープンに失敗すると思ったら、サービスのオーナーがLocalSystemになっとった。これじゃネットワーク越しの、ドメイン認証されるファイルが開けんわい。

サービスのインストーラをUserにすれば何とかなるが、インストールする度にユーザ認証してたんじゃたまらん。さてどうしたもんか。
ローカルサービスがドメインユーザにしか許可されていないリモートフォルダに接続するには...はてさてこれは困ったな。

ファイルオープンするときに、認証情報を一緒に送る方法を探そう。

Saturday, March 25, 2006

ログオンスクリプトから別プロセス

Windowsのログオンスクリプトから呼び出している、いくつかの子スクリプトが、ログオンスクリプトの終了とともに落ちてしまう。親子関係があるので仕方ないと思うのだが、子スクリプトを実行させるのに

WshShell.Run("hoge.js", 0, true);

して実行完了のステータス(0など)が戻るまでは次のステートメントに進まないようにしていてもだめな様子。ログオンスクリプトの最後で眺めにSleepさせると、呼び出しているhoge.jsは終わっちゃうくせにログオンスクリプトは終了せずに、なかなかExplorerが起動しない。(デスクトップが現れない)

どうやらログオンスクリプトの生死に関わらず、Runしているスクリプトが落ちてしまうようだ。もちろんログオンスクリプトが終了すれば、一緒になって終了してしまう。なんでだ?
子プロセスとしてではなく、独立したプロセスとして呼び出せばとりあえず解決する問題なのだが。WSHはどうやって実行中スクリプトのプロセス管理しているのだろう。

あ、そもそもログオンスクリプトを分けてやればいいのか...。
やってみよ。

Thursday, March 16, 2006

うーん便利だ

引き続きJScript中。

今までC#.NETでやってたログオン経過時間計測アプリから、ログオン時のステータスチェックをJScriptに分けて処理することにした。
たいした処理じゃないのにいちいちVisualStudio使って作るのが面倒になった。

たとえばログオン時にログオン履歴のファイルをざっと読んで、前回はいつログオンしたんだとか、ログオンしっぱなしじゃないかとか、無制限ユーザを判別する(一般ユーザには時間制限がある)とか、その程度のことなのでわざわざC#殿にお出ましいただくことはないのだ。

それからものすごく重宝しているのがExec()メソッド。実行結果の標準出力を拾っておけるのでログ管理がしやすい。たとえば、

----------
var WshShell = WScript.CreateObject("WScript.Shell");
var oExec = WshShell.Exec("dir c:\\log");
var oExecStdOut = oExec.StdOut;

var objFSO = new ActiveXObject("Scripting.FileSystemObject");
var txtFile = objFSO.OpenTextFile("c:\\dir.txt", 8, true);

while (oExecStdOut.AtEndOfStream == false) {
txtFile.WriteLine(ReadLine(oExecStdOut));
}
txtFile.Close();
----------

てな感じでコマンド処理の結果をファイルに流し込めるのだ。
これがあると、作業結果をばんばんファイルに落とせるのでべんりだ。

いやべつにC#でもできるけどさ。楽チンなのよ。
あーいかん、もっとストイックにならねば。

Thursday, March 02, 2006

JScriptだべ

最近JScriptやることになりました。
これまでいわゆるバッチファイルにしていたところを大整理して、極力JScriptに書き直し。
面倒なところはなんでもExec()やらRun()してごまかしてますが。

スクリプト書くならVBの人が多いんだろうなあ。資料を探していたらVBScript(3/3訂正)のはあってもJScriptのはほとんどなし。ずっとMSで検索してやってたんだけど、いい加減めんどくさいので資料を探したらこれしかない。orz
仕方ないので一冊すぐ買って来ました。
VBScript(3/3訂正)よりJScriptの方がずっと応用がきくと思うんだけどなあ。

職場にもOffice & VB & VBScript(3/3訂正)使いな方がいらっしゃるのだけど、Accessでコツコツ(?)とアプリケーションをつくっているのをみると、確かにあちら(3/3訂正)のほうが便利ですな。ユーザに近いひとほどVB*(3/3訂正)なんだろうか。
でもちょっとBasicという名称に抵抗があって取っ付きづらい。コメントが ' だとか、お尻に ; がないとか自分的にはちょっと気持ち悪いなあ。

あ、まだ経験がないからか。
いろいろやったらそんなこと気になんなくなるんだろうか。