攻殻機動シェルエグゼキュート弐式
前回と同じノリで。
さて、「Brynhildr 2.3.0 RC1」で降格ShellExecuteを修正したって話の続きです。
BrynhildrをWindowsサービスとして動作した場合、Windowsサービスはシステム権限すぎて、基本的にデスクトップとかマイドキュメントとかログインユーザーのフォルダに触れる事ができません。
ですので、Windowsサービスはログインユーザーのフリをしてユーザー権限のフォルダを参照する必要があるんです。そのログインユーザーのフリをするのが「降格ShellExecute」というワケです。正確にはシステム権限よりも降格させた権限でShellExecuteを実行ですね。
で、以前は降格ShellExecuteに「IShellDispatch2.ShellExecute」を利用してたんですが、これだとサーバーOSで不具合が出たんで「CreateProcessAsUser」に変更したんです。これが「2.2.9」までです。
でも「CreateProcessAsUser」だとデスクトップのリンクが利用できない事が分かりました。デスクトップも参照はできるんですが保存ダイアログで表示されているデスクトップへのリンクが機能しないってとこです。エラーが出るんです。デスクトップのリンクの全てのリンクでエラーが出るわけでちょっと寝覚めが悪いんですが。なんなんですかねこれ。
これどうもログインしていないのにデスクトップを参照しようとしたら出るエラーらしくて完全にログインユーザーのフリが出来ていない感じなんでしょうか。
で。
検討した末、以前のように再び「IShellDispatch2.ShellExecute」を利用する事にしました。これだとOKです。ログインユーザーのフリをして保存ダイアログのデスクトップも参照でけます。
前にダメだったサーバーOSで試してみたんですが、今だと問題ないんでアレは夢だったたのか?感もあるんですが、恐らくその時のバージョンでちょっと問題があってWindowsUpdateで問題なくなったとかゆー感じじゃないかと推測しておりやす。
でも、また発生したらイヤなんで、「IShellDispatch2.ShellExecute」と「CreateProcessAsUser」のハイブリッドタイプにしてあります。「IShellDispatch2.ShellExecute」でダメだったら「CreateProcessAsUser」になる的な。あとWindowsXP以前でも「CreateProcessAsUser」になります。あの時期はスルーでいけるんでこの件。とっても楽な時代でした。色んな意味で。
そんな感じの実装にあいなりました。
そんなこんなで二転三転してますけど、この辺の情報が日に日に少なくなってきてる感もしないでもないですが、確実に周りの若手エンジニアはこの手の話題について全く関心がないとゆーか必要に迫られていないとゆーか、羨ましいとゆーか寂しいとゆーか。ま、自分の仕事がまだまだなくなりそうにないんでそれはそれで安心してますが。
でも自分もそろそろ楽したい気持ちもあるんで、そろそろ後継者を何とかせねばとゆー段階ですかねー。会社の方も忙しいですし、個人事業主としては結構キツ目の規模になってきますし、ここは手分けして作業にかかった方が得策では無いかと。出張先のホテルで午前3時過ぎまでコードを書いてるってちょっとアレだと思うんですよね。体力勝負できてるうちはまだ良いんですけどね。ま、あと数年でIchiGekiは引退したいとは思ってましたんでそろそろIchiGekiの中の人が交代の準備開始って感じですかね。いやIchiGekiなんて名前イラネーヨって言われれば無くなっちゃっても全然OKなんですが。リモートデスクトップ技術だけでも持って帰ってもらえればと。ガンガン機密保持契約を締結します。
そんなこんなでIchiGekiの後継者を募集します。但し「メガネ女子に限定」で。
このネタは確か3年前にも書いてたな。メガネ女子がパワーワード過ぎるよ全く。
以上です、編集長。