コンピューターのことなどを綴ったメモ (旧:目から鱗 w/SQLite)
Jeans & Development | 電子ブロック工房 | 三日坊主 | フロントページ |
Vistaにおいて、VBScriptスクリプト中で管理者権限に移行する方法 [プログラミング]
2008年4月12日
option explicit Dim wmi,os,value,wsh,sha,sfo Set sfo=CreateObject("Scripting.FileSystemObject") do while WScript.Arguments.Count=0 and WScript.Version>=5.7 'Check if Vista Set wmi = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set os = wmi.ExecQuery ("SELECT * FROM Win32_OperatingSystem") For Each value in os if left(value.Version,3)<6.0 then exit do 'Exit if not Vista Next 'Run this script as admin. Set sha=CreateObject("Shell.Application") sha.ShellExecute "wscript.exe",""""+WScript.ScriptFullName+""" vista","","runas" WScript.Quit loop 'Current directory may be moved to system32, maybe not. Set wsh=CreateObject("WScript.Shell") wsh.run "regsvr32.exe """+sfo.GetAbsolutePathName(WScript.ScriptFullName & "\..\" & "sfcmini.dll")+""""
Vistaかどうかのチェック方法として、『WSHのバージョンが5.7以上』かつ『Windowsのバージョンが6.0以上』で調べている。これに該当する場合、Shell.ApplicationオブジェクトのShellExecuteメソッドを利用して管理者権限でwscript.exeを起動しなおす(このとき、引数に『vista』を指定)。最後に、regsvr32.exeを実行して終了。
QIQを試してみた [プログラミング]
2008年4月7日
先日の記事、『PHPでクロージャもどき』を書いた後、hsurさんからの指摘などもいただいて色々調べた結果、先の記事の方法ではcreate_functionを使う不便さを除けば、一般的なクロージャの機能は一通りそろえていることは分かった。
一方で、create_functionの不便さはいかんともしがたいと思っていた矢先、知ったのがこれ:
続々・Zend Engine Hack (クロージャもあるよ) (拡張モジュールもあるよ) - 讃容日記:
C++/CLIを使うか? [コンピューター・その他]
2008年4月6日
で、どうしたものかと色々調べた結果、おそらく解決策になるであろう方法を見つけた。
いままたC++が熱い!「C++/CLI」として大進化したVisual C++ 2005
プロの方々は今更何をとおっしゃるかも知れないけれど、私はこれを昨日知った。恐るべし、マイクロソフト。
Visual C++ でランタイム不要のDLLを作成する方法 [プログラミング]
2008年4月4日
Project
-> Properties
-> Configuration Properties
-> C/C++
-> Code Generation
-> Runtime Library
この項目の中に、
・Multi-threaded (/MT)
・Multi-Threaded Debug (/MTd)
・Multi-Threaded DLL (/MD)
・Multi-Threaded Debug DLL
があるので、/MT もしくは、/MTd を選択する。
参考:MSDN
空飛ぶペンギン [General]
2008年4月1日
YouTubeの動画挿入のテストもかねて…。それにしても、うまく撮れてる。
ところで、ペンギンは本当に飛ぶ。私は、海遊館でペンギンが飛ぶところをちゃんとこの目で見た。
PHPで動的OOPもどき [プログラミング]
2008年3月26日
<?php $obj=(object)$obj; $obj->testfunc=create_function('$i','return $i+1;'); //echo $obj->testfunc(2);// Fatal Error $f=&$obj->testfunc; echo $f(2);// 3 $obj=new dynamic_obj; $obj->testfunc=create_function('$i','return $i+1;'); $obj->testfunc2=create_function('$i','return $i+2;'); echo $obj->testfunc(2);// 3 echo $obj->testfunc2(2);// 4 $obj->__destruct=create_function('','echo "__destruct!";');//__destruct! class dynamic_obj{ public function __call($methodname,$args){ return call_user_func_array($this->$methodname,$args); } public function __destruct(){ if (isset($this->__destruct)) call_user_func($this->__destruct); } }
実行結果
334__destruct!
どんなときに便利か、今は思いつかないけれど。
PHPでクロージャもどき [プログラミング]
2008年3月25日
これを知るため、Googleで『クローじゃ』もとい『クロージャ』で検索すると、最上位に出るのがこれ。
クロージャ - Wikipedia
これによると、
クロージャ (Closure) は、プログラミング言語において引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決する関数のことである。
とのこと。ちなみに、『クローじゃ』で検索すると、次のものが出る。
PHPでクローじゃもどき - odz buffer
JScriptでinputBoxを使う [プログラミング]
2008年3月25日
Windowsスクリプティング環境比較:PowerShell vs WSH
PowerShell自身について何か書くのは別の機会に譲るとして、これを読んで面白いことに気がついたので、メモ。この記事の中から、マイクロソフトの次のページにリンクされている。
Converting VBScript Commands to Windows PowerShell Commands
VBScriptでできることは一通りPowerShellでできるらしい。で、思い出したのが、inputBox。これは、WSHにおいてはVBScriptにだけ実装されている機能で、JScriptでは使えない。PowerShellではどうかと、調べてみた。
SFC miniのインストールがWindows Vistaで失敗する件について [プログラミング]
2008年3月21日

このエラーを回避するためには、次に述べるいずれかの方法を用いてください。
1)管理者としてコマンドプロンプトを開き、SFC mini ディレクトリに移動した後に、install-AMD.vbsもしくはinstall-INTEL.vbsを実行する。
2)MakeExeを用いてinstall-AMD.vbsもしくはinstall-INTEL.vbsをexeファイルに変換した後、このexeファイルを管理者として実行する。
いずれの方法でもインストール可能なはずです。
また、Windows Vistaのバグだと思われること(下記参照)が原因で、サンプルプログラムのいくつかが動きません。VBSファイルを少し改変することで、この不具合を回避することができます。例えば、WinSockClient.vbsの場合だと、2行目あたりを次のように変更してください。
dim code code=CreateObject("SfcMini.tools").Include("<Winsock.vbs>") Execute code
WinForm等のライブラリを用いているスクリプトについては、ライブラリ自身のVBSファイルを変更する必要があります。これについては、時期配布バージョンで対応する予定です。
(参考)
1)この不具合についてですが、COMからの戻り値である文字列を直接Executeした場合に、Execute自体は成功するけれども、その直後に不具合が発生するという状況です。ガベージコレクタ周りの不具合では無いかと考えています。WSHのこのような利用の仕方はまれなケースなので、Windows側でこのことについて改善されるかどうかは分かりません。
2)Windows Vistaでは、wscript.exeに対してDEPを無効にすることはできないようです。WinForm等を利用するスクリプトを実行する場合は、install-AMD.vbsを利用してください。
スパム対策ロードマップ [Nucleus]
2008年3月16日
Googleで『CAPTCHA』というキーで検索した場合に上位に出てくる記事に以下のものが有る。
CAPTCHAは愚策
CAPTCHAが人間に一手間とらせるのが嫌いと考えるのは私も同じで、だからこのサイトではProtectByMD5を採用している(JavaScriptを利用)のだが、この方法は上記サイトで提案している方法の一つである。ただ、心配されているとおり、ブラウザの機能をそのままスパムロボットが持ってしまった場合(実際には、これはそれほど難しくない)、そういったロボットにはJavaScriptの難しい計算は何の問題にもならなくなる。