tag:blogger.com,1999:blog-55136012696797300892024-03-14T16:54:29.770+09:00ぷりんすの開発メモprinshttp://www.blogger.com/profile/09952130633048197953noreply@blogger.comBlogger22125tag:blogger.com,1999:blog-5513601269679730089.post-28477637552790600492012-11-22T00:33:00.000+09:002012-11-22T00:45:15.621+09:002011年春モデルのVAIO TypeE(VPCEA4AFJ)のWindows8アップデート顛末記2011年の夏にアウトレットで購入した14インチのVAIO Type E (ATI Mobility Radeon HD 5470搭載)<br />
をWindows8にアップデートしたので、その時ハマったポイントなどを書き残しておきます。<br />
全体的な印象として、Vista→7の時のアップデートのスムーズさを期待すると裏切られます。<br />
7との互換性は高いといわれてますが、ドライバ類がちょっと問題ありでした。<br />
<br />
【注意】<br />
公式サイトによると、2011春モデルは<a href="http://vcl.vaio.sony.co.jp/windows/8/upgrade/index.html">Win8に更新するとサポート対象外</a>になるみたいなので、<br />
心配な方はやめておいたほうが良いでしょう。(アップデートは自己責任で!)<br />
<br />
【インストールまで】<br />
・Windows8はダウンロード版であれば2013/1/31まで3,300円で購入できます。<br />
(<a href="http://windows.microsoft.com/ja-JP/windows/buy?ocid=GA8_O_WOL_DIS_ShopHP_FPP_Light">http://windows.microsoft.com/ja-JP/windows/buy?ocid=GA8_O_WOL_DIS_ShopHP_FPP_Light</a>)<br />
<br />
・支払いはクレジットカードとかPayPalで簡単に出来ます。<br />
<br />
・念のため有線LANで作業を行うことにしました。<br />
<br />
・購入するとWindows7上からアップグレードツールが起動して、ダウンロードが行われます。<br />
<br />
・ダウンロード完了後に、(1)すぐにインストール、(2)ISOとして保存、(3)USBに保存の3種類の<br />
オプションが選べます。今回はアプリを引き継いでアップグレードしたいので(1)を選択。<br />
<br />
・移行アシスタントが起動して、Windows8と互換性の無いアプリを事前に教えてくれます。<br />
(この時点でまだキャンセルできたはず) いくつか例を。<br />
<ol>
<li>Windows8ではDVD再生機能が標準で搭載されていませんが、いまならWindows Media Centerを無料で入手できるので気にしなくて大丈夫です。(<a href="http://windows.microsoft.com/ja-JP/windows-8/feature-packs">http://windows.microsoft.com/ja-JP/windows-8/feature-packs</a>) ※プロダクトキーが届くまで1~2日かかります</li><br />
<a href="http://3.bp.blogspot.com/-b7fiUPon_2U/UKzxibHPAMI/AAAAAAAAAIQ/qbvbtZaHlnQ/s1600/1.png" imageanchor="1" style=""><img border="0" height="33" width="320" src="http://3.bp.blogspot.com/-b7fiUPon_2U/UKzxibHPAMI/AAAAAAAAAIQ/qbvbtZaHlnQ/s320/1.png" /></a><br /><br />
<li>DEAMON ToolsはISOイメージのマウントの為だけに使っていたので削除。(Windows8ではOS標準でISOイメージを扱えます)</li><br />
<a href="http://1.bp.blogspot.com/-8UfLcOsWBIg/UKzyGMjaXwI/AAAAAAAAAIc/0IDFXlGagVU/s1600/2.png" imageanchor="1" style=""><img border="0" height="42" width="278" src="http://1.bp.blogspot.com/-8UfLcOsWBIg/UKzyGMjaXwI/AAAAAAAAAIc/0IDFXlGagVU/s320/2.png" /></a>
<br /><br />
<li>ATIのディスプレイドライバ、これでハマりました(後述)</li><br />
<a href="http://3.bp.blogspot.com/-ER8MbF8RDX8/UKzyPq-SQDI/AAAAAAAAAIo/lNs7Y4lz5dY/s1600/3.png" imageanchor="1" style=""><img border="0" height="118" width="320" src="http://3.bp.blogspot.com/-ER8MbF8RDX8/UKzyPq-SQDI/AAAAAAAAAIo/lNs7Y4lz5dY/s320/3.png" /></a><br /><br />
<li>素直に指示に従ってPCとの関連付けを一度削除しておきました</li><br />
<a href="http://2.bp.blogspot.com/-13v2ePpk4To/UKzyVbW6WkI/AAAAAAAAAI0/wbEBzccaCEc/s1600/4.png" imageanchor="1" style=""><img border="0" height="65" width="254" src="http://2.bp.blogspot.com/-13v2ePpk4To/UKzyVbW6WkI/AAAAAAAAAI0/wbEBzccaCEc/s320/4.png" /></a>
<br /><br />
<li>使ってないので要らないですね。この機会に削除。(なんで有料?)</li><br />
<a href="http://2.bp.blogspot.com/-Bwmll2Zjoho/UKzybyEEbTI/AAAAAAAAAJA/mlgJh-gNFLk/s1600/5.png" imageanchor="1" style=""><img border="0" height="61" width="316" src="http://2.bp.blogspot.com/-Bwmll2Zjoho/UKzybyEEbTI/AAAAAAAAAJA/mlgJh-gNFLk/s320/5.png" /></a><br /><br />
</ol>
<div>
・インストール開始してから終了までは問題なく推移。(3時間くらいかかりました)</div>
<div>
<br /></div>
<div>
【Windows8起動後】</div>
・Windows Updateを実行して、OSを最新の状態にします。<br />
<br />
・ここで無線LANに切り替えましたが問題なく使えました。<br />
<br />
・VUDesktopToast.exe(VAIO Update関係のツール?)でmfc110u.dllが無いと怒られます。 <br />
→<a href="http://www.microsoft.com/ja-jp/download/details.aspx?id=30679">Visual Studio 2012 の Visual C++ 再頒布可能パッケージ</a>を入れれば良いです。<br />
(x86とx64両方入れておきましょう。ちなみにVUDesktopToast.exeはx86で動いてました)<br />
<br />
・.NET Framework 3.5を入れないと動かないアプリもあるので、コントロールパネルの<br />
「プログラムと機能」から「Windowsの機能の有効~」を選んで入れておきます。<br /><br />
<a href="http://2.bp.blogspot.com/-fZRl0sn-078/UKzy6demoyI/AAAAAAAAAJM/LG4X3JPc75g/s1600/6.png" imageanchor="1" style=""><img border="0" height="280" width="320" src="http://2.bp.blogspot.com/-fZRl0sn-078/UKzy6demoyI/AAAAAAAAAJM/LG4X3JPc75g/s320/6.png" /></a><br />
<br />
・HDMI接続をしていると、ディスプレイドライバが正しく認識されていないことに気付くはずです。<br />
Windowsの設定ではFullHDになっていても、実際には周りに黒枠が出て解像度も低い状態です。<br />
<ol>
<li>普通こういう場合はATI(AMD)のHPに行ってWin8対応の最新のドライバを取ってきて入れてやれば解決しますが、VAIOは特殊らしく<b>この方法では解決できません</b>でした。AMDのページにもよく見るとSONYのLaptopは対応してないよって書いてあります。</li>
<li>とりあえず、「ATI Catalyst Control Center」と「ATI Catalyst Install Manager」を一度アンインストールします。</li>
<li>VAIO公式に行って<a href="http://vcl.vaio.sony.co.jp/download/EP0000230054.html">Win7用のATIの最新ドライバ</a>をダウンロードします。</li>
<li>Win7互換モードかつ管理者権限で実行します。(下記手順)</li><br />
<a href="http://4.bp.blogspot.com/-ji1FmaWNgTY/UKzzMM9lt8I/AAAAAAAAAJY/N02Ec5pZ36U/s1600/7.png" imageanchor="1" style=""><img border="0" height="96" width="320" src="http://4.bp.blogspot.com/-ji1FmaWNgTY/UKzzMM9lt8I/AAAAAAAAAJY/N02Ec5pZ36U/s320/7.png" /></a><br /><br />
<a href="http://2.bp.blogspot.com/-xezcrAAjA00/UKzzR2-85LI/AAAAAAAAAJk/zctterynJF8/s1600/8.png" imageanchor="1" style=""><img border="0" height="246" width="320" src="http://2.bp.blogspot.com/-xezcrAAjA00/UKzzR2-85LI/AAAAAAAAAJk/zctterynJF8/s320/8.png" /></a><br /><br />
<a href="http://1.bp.blogspot.com/-PTCn-mJt0Bc/UKzzXf21ZmI/AAAAAAAAAJw/shFUYu4ZQ6k/s1600/9.png" imageanchor="1" style=""><img border="0" height="246" width="320" src="http://1.bp.blogspot.com/-PTCn-mJt0Bc/UKzzXf21ZmI/AAAAAAAAAJw/shFUYu4ZQ6k/s320/9.png" /></a><br /><br />
<a href="http://1.bp.blogspot.com/-7iqTrThwG1M/UKzzcXqpCCI/AAAAAAAAAJ8/oWusfzmgQDA/s1600/10.png" imageanchor="1" style=""><img border="0" height="246" width="320" src="http://1.bp.blogspot.com/-7iqTrThwG1M/UKzzcXqpCCI/AAAAAAAAAJ8/oWusfzmgQDA/s320/10.png" /></a><br /><br />
<li>「プログラムのテスト」ボタンを押すと実行されます。ファイル展開ダイアログ表示後は、画面には何も表示されませんが暫く待ちましょう。画面が何度か明滅するのが動いている証拠です。2、3分くらいで処理が終わり、HDMIでFullHD表示できるようになりました。</li><br />
<a href="http://3.bp.blogspot.com/-Bi04tpRBgAI/UKzznbHbr5I/AAAAAAAAAKI/7kcU1Yss3VE/s1600/11.png" imageanchor="1" style=""><img border="0" height="246" width="320" src="http://3.bp.blogspot.com/-Bi04tpRBgAI/UKzznbHbr5I/AAAAAAAAAKI/7kcU1Yss3VE/s320/11.png" /></a>
</ol>
<br />
上記のように、いくつかトラブルはあったものの、無事解決して今は快適にWin8稼働してます。<br />
<br />
<br />prinshttp://www.blogger.com/profile/09952130633048197953noreply@blogger.com0tag:blogger.com,1999:blog-5513601269679730089.post-70211421064473263732012-08-04T18:06:00.000+09:002012-08-04T18:09:38.603+09:00ActiveXコントロールをOLEオートメーションで呼び出す方法<br />
ActiveXコントロールをダイアログに張り付けず、 ダイアログなしのオートメーションサーバーとして呼び出したい<br />
場合のやり方についてです。試したのはイベントを含んでいないケース(プロパティとメソッドのみ)なので、<br />
イベントをサポートしている場合にどういった挙動になるかは調べてません。<br /><br />
これ普通のDLLでよかったんじゃ・・・。というActiveXコントロールを、マルチスレッドでの利用のために<br />
オートメーションを使った呼び出しに変更した時のお話です。<br />
知ってれば1分で終わる話ですが、少し調べるのに手間取ったのでメモしておきます。<br />
ちなみに対象のActiveXコントロールのソースコードにアクセスできて、ビルド可能な事が前提です。<br />
<br />
結論から書くと、ActiveX側のCOleControlから派生しているクラスで、IsInvokeAllowedを<br />
オーバーライドしてTRUEを返すだけです。<br />
--<br />
以下は試した内容です。<br />
<br />
<b>①タイプライブラリの作成</b><br />
タイプライブラリを使用しますので、ActiveXコントロールをビルドしてもtlbファイルが生成されていない場合、<br />
プロジェクトのプロパティから、MIDLの出力設定へ進み、タイプライブラリを生成する設定にします。<br />
<br />
<b>②ラッパークラスの作成<br /></b>
クラスウィザードで、MFCy→「TypeLib からの MFC クラス」を選び、<br />
タイプライブラリを選択してラッパークラスを作成します。<br />
COleDispatchDriverから派生したクラスが自動生成されているはずです。<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="http://4.bp.blogspot.com/-XTKWatzXCRQ/UBzeJ7C1PSI/AAAAAAAAAH8/0QXygwDzlPg/s1600/1.png" imageanchor="1" style="clear: left; float: none; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="302" src="http://4.bp.blogspot.com/-XTKWatzXCRQ/UBzeJ7C1PSI/AAAAAAAAAH8/0QXygwDzlPg/s400/1.png" width="400" /></a></div>
<br />
<b>③ラッパークラスの調整<br /></b>
一番上に#import文があると思いますが、今回はCreateDispatchを呼ぶ際のGUIDを取得する以外には使いませんので、<br />
ラッパークラスを生成しない様に下記の様なオプションを設定しておきます。<br />
<br />
<span style="background-color: #eeeeee;">#import "xxx.tlb" no_namespace named_guids no_implementation no_smart_pointers raw_interfaces_only</span><br />
<br />
ビルドすると、出力フォルダにxxx.tlhというファイルが自動生成されます。<br />
これをエディタで開き、CLSID_から始まるGUIDを探します。<br />
<br />
<b>④使ってみる<br /></b>
ActiveXコントロールと接続するためには、下記にように書きます。
<pre name="code" class="c++:nogutter:nocontrols">
// テストコード
// (自動生成されたクラス名を仮にCMyOle、GUIDをCLSID_XXXとします)
CMyOle myObj;
if(myObj.CreateDispatch(CLSID_XXX) == TRUE){
myObj.FuncA();
}
</pre>
多分FuncAの呼び出しでCOleException (エラーコード 0x8000FFFF) が発生したと思います。<br />
CreateDispatchに失敗する場合は、COMが登録されていない(regsvr32)か、CLSIDが<br />
間違っている可能性があります。(ここで指定すべきはIIDではなくCLSIDです)<br />
<br />
<b>⑤ActiveXコントロールの変更</b>
<pre name="code" class="c++:nogutter:nocontrols">
// COleControlから派生しているクラスでIsInvokeAllowedを
// オーバーライドしてTRUEを返す
BOOL CMyOleControl::IsInvokeAllowed (DISPID)
{
return TRUE;
}
</pre>
<b>⑥再度試す<br /></b>
ビルドしなおしてテストすると、今度は④のコード呼び出しが成功しました。
<br /><br />
【参考】<br />
How to use an OLE control as an automation server in Visual C++<br />
<a href="http://support.microsoft.com/kb/146120/EN-US">http://support.microsoft.com/kb/146120/EN-US</a>
<br />
<br />prinshttp://www.blogger.com/profile/09952130633048197953noreply@blogger.com0tag:blogger.com,1999:blog-5513601269679730089.post-81240003637494637472012-07-23T00:09:00.000+09:002012-07-23T00:10:05.444+09:00Chrome拡張機能のマニフェストVesrsion2対応についてのメモ<br />
<a href="http://prins-note.blogspot.jp/2010/10/chrome-last-tab-keeper.html">2年前くらいに作成したChrome拡張機能(Last Tab Keeper)</a>のManifest Version 2対応を行いました。<br />
もともと自分が欲しくて作ったものですが、いつの間にか2千人近い方に使って頂きありがとうございます。<br />
何か機能追加を行った訳ではありませんが、これをやらないと2013年第3四半期には使えなくなってしまう
との事でしたので、<br />
アップデートを行いました。その時の内容を少しメモしておきます。<br />
<br />
【manifest.jsonの変更】<br />
<br />
・まず下記のプロパティの追加が必要<br />
"manifest_version": 2<br />
<br />
・"background_page"プロパティが"background"に名前変更され、記述方法が変更されています<br />
v1はhtmlのscriptタグでjsを読み込んでいましたが、v2からjsを直接読み込むよう指定できます。<br />
<pre name="code" class="js:nogutter:nocontrols">
// マニフェストv1の記述
"background_page": "background.html",
// マニフェストv2の記述
"background": {
"scripts": ["background.js"]
},
</pre>
【新しいセキュリティポリシー(CSP)への対応】<br />
インラインのJavascriptの実行ができなくなりました。下記のような対応が必要になります。<br />
(もともとViewとロジックを分離するようにコード書いている人は最初の2つは別段対応いらないかもしれません・・・)<br />
<br />
・htmlファイル内にjavascriptを含めることができませんので、別ファイルに分けてscriptタグで読み込む必要があります。<br />
<br />
・イベントハンドラ(onloadとかonclick)もhtml上には記述できません。例えば下記のようにjsファイルで動的に追加します。
<pre name="code" class="js:nogutter:nocontrols">
// 動的にイベントハンドラを追加
document.addEventListener('DOMContentLoaded', function () {
// 1. bodyのonloadで行っていた初期化コードなどをここに書く
// 2. イベントハンドラの登録をする
document.querySelector('button').addEventListener('click', save_options);
});
</pre>
・スクリプトやリソースは同梱しないといけなくなりました。(ネット上からjQueryなどのライブラリを読み込んではいけない)<br />
<br />
※かなりシンプルな拡張機能ですので上記対応で済みましたが、これ以外にも影響あるかと思います。<br />
複雑なものをお作りの方はそれなりの変更工数かかるのでは?という印象でした。
<br />
ちなみにストアの方は特に変更無いみたいで、今までと同じ方法でアップロードできました。<br />
<br />
【参考サイト】<br />
[公式]<br />
<a href="http://code.google.com/chrome/extensions/manifestVersion.html">Manifest Version</a> // 以降スケジュールや差分などについて<br />
<a href="http://code.google.com/chrome/extensions/manifest.html">Formats: Manifest Files</a> // マニフェストファイルの詳細<br />
<a href="http://code.google.com/chrome/extensions/contentSecurityPolicy.html">Content Security Policy (CSP)</a> // 一番影響のあるセキュリティポリシーの詳細について<br />
<br />
[その他]<br />
<a href="http://blog.makotokw.com/2012/07/19/chrome-tech-talk-night-3-%E8%A1%8C%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%A7%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD%E3%81%AE%E5%86%85%E5%AE%B9%E3%82%92%E3%81%BE%E3%81%A8%E3%82%81%E3%81%A6%E3%81%BF%E3%82%8B/">Chrome Tech Talk Night #3 行ったので拡張機能の内容をまとめてみる</a><br />
↑日本語情報があまり無い中、とても参考になりました<br />
<br />prinshttp://www.blogger.com/profile/09952130633048197953noreply@blogger.com0tag:blogger.com,1999:blog-5513601269679730089.post-70727146187563344742012-07-10T21:56:00.000+09:002012-07-10T22:05:44.180+09:00OpenSSLを使ったファイルハッシュ計算方法openssl.exeを使った方法と、C++でライブラリを呼び出して計算してみる2パターンをメモ。<br />
<br />
【SHA1の場合】<br />
<span style="background-color: #eeeeee;">openssl.exe sha1 [ファイル名]</span><br />
<br />
Visual Studioを使ったC++(コンソールアプリ)のサンプルは下記のような感じになります。<br />
サンプルではWindows8 RP版のisoイメージのファイルハッシュを計算してテストしてみました。<br />
<pre class="c++:nogutter" name="code">
#include "stdafx.h"
#include "Hash.h" // OpenSSLのinclude
#define TARGET_FILE "E:\\Windows8-ReleasePreview-32bit-Japanese.iso"
#define BUFSIZE (1024 * 16) // OpenSSLの定義と同じ
int _tmain(int argc, _TCHAR* argv[])
{
unsigned char sha1hash[SHA_DIGEST_LENGTH] = { 0 };
unsigned char buf[BUFSIZE];
DWORD dwStart = 0;
DWORD dwEnd = 0;
// SHA1 using OpneSSL lib
printf("Calculate file hash for sha1\n");
dwStart = ::GetTickCount();
SHA_CTX ctx;
SHA1_Init(&ctx);
CFile file(TARGET_FILE, CFile::modeRead);
UINT nRead = 0;
do{
nRead = file.Read(buf, BUFSIZE);
if(nRead > 0){
SHA1_Update(&ctx, buf, nRead);
}
}while(nRead == BUFSIZE);
SHA1_Final(sha1hash, &ctx);
dwEnd = ::GetTickCount() - dwStart;
printf("SHA1(%s)= ", TARGET_FILE);
for(int i = 0; i < SHA_DIGEST_LENGTH; i++){
printf("%.2x",sha1hash[i]);
}
printf("\n");
printf("Elapsed Time(ms) = %d\n", dwEnd);
return 0;
}
</pre>
※OpenSSLライブラリとは、stdafx.hで下記のように書くか、設定画面でリンクの設定をしてください。<br />
<pre class="c++:nogutter:nocontrols" name="code">// OpenSSL lib
#pragma comment(lib, "openssl/lib/libeay32.lib")
#pragma comment(lib, "openssl/lib/ssleay32.lib")
</pre>
<br />
【MD5の場合】<br />
<span style="background-color: #eeeeee;">openssl.exe md5 [ファイル名]</span><br />
<br />
ソースの方はMD5_~に変わるだけで、あとは全く同じなので省略します。<br />
<br />prinshttp://www.blogger.com/profile/09952130633048197953noreply@blogger.com0tag:blogger.com,1999:blog-5513601269679730089.post-69673873496789962262012-07-10T20:44:00.000+09:002012-07-10T20:44:12.592+09:00Visual Studio registry capture utility のエラー解決方法久しぶりにCOM連携アプリケーションをビルドしたら下記エラーがでました。<br />
Visual StudioのSetupプロジェクトで、tlbファイルを依存関係に追加している場合、<br />
Windows7(x64)環境下で発生するようです。ちなみにVisual Studioは2005です。<br />
<br />
<a href="http://4.bp.blogspot.com/-9Ng8Aaq00bc/T_uRheI0PMI/AAAAAAAAAHw/j6__RvswDlQ/s1600/Error.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="185" src="http://4.bp.blogspot.com/-9Ng8Aaq00bc/T_uRheI0PMI/AAAAAAAAAHw/j6__RvswDlQ/s320/Error.png" width="320" /></a><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Google先生に聞いて、下記ブログを参考に解決できました。<br />
<a href="http://kiyutsumi.wordpress.com/2010/09/11/vs2010registry-capture-utility%E3%81%8C%E5%8B%95%E4%BD%9C%E5%81%9C%E6%AD%A2%E3%81%99%E3%82%8B%E5%95%8F%E9%A1%8C%E3%80%80%EF%BC%8D%E3%80%80%E3%81%A8%E3%82%8A%E3%81%82%E3%81%88%E3%81%9A%E8%A7%A3/">[VS2010]Registry Capture Utilityが動作停止する問題 - とりあえず解決</a><br />
<br />
すぐ忘れそうなのでメモしておきます。 <br />
解決方法としては、regcap.exeのプロパティを開いて、互換モードを<br />
Windows Vista (Service Pack2)に変更すれば良いみたいです。<br />
<br />
[regcap.exeの場所]<br />
<span style="background-color: #cfe2f3;">C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\Tools\Deployment\regcap.exe</span><br />
※VS2008やVS2010でもCommon7以下のパスは同じです<br />
<br />prinshttp://www.blogger.com/profile/09952130633048197953noreply@blogger.com0tag:blogger.com,1999:blog-5513601269679730089.post-74042823249820313892012-06-16T13:06:00.000+09:002012-06-16T13:07:35.951+09:00[WinJS] CP版の Metro Style アプリをRP版に移行する時のメモJavascriptで作っていたメトロアプリが案の定動かなくなったので、その時の移行のメモです。<br />
動的言語なので、オブジェクトの中身が変わっていても実行時にしかわからないのが痛いですね。<br />
CP版のVS11で作成したアプリを、RP版のVS2012でビルドしなおす場合を想定しています。<br />
<br />
<b>(1) WinJSの参照をやり直す</b><br />
CP版は0.6だったのですが、1.0.RCというバージョンになっています。<br />
なので、一度参照を削除して再度追加してやる必要があります。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-eIaqHB5DJe0/T9vnafbrScI/AAAAAAAAAHc/2NE0Wy2HGHw/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="http://3.bp.blogspot.com/-eIaqHB5DJe0/T9vnafbrScI/AAAAAAAAAHc/2NE0Wy2HGHw/s640/1.png" width="640" /></a></div>
<br />
<br />
<b>(2) default.htmlの参照を修正する</b><br />
下記のように、WinJSへの参照の部分を、Microsoft.WinJS.0.6からMicrosoft.WinJS.1.0.RCに修正します。WinJSの参照をしなおしただけでは、自動で変わりませんので注意してください。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-nFws-i0NQRY/T9vnuBAqiAI/AAAAAAAAAHk/3-InTOFXHY4/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="88" src="http://4.bp.blogspot.com/-nFws-i0NQRY/T9vnuBAqiAI/AAAAAAAAAHk/3-InTOFXHY4/s640/2.png" width="640" /></a></div>
<br />
<b>(3) RC版での変更に対応する</b><br />
ビルドしただけでは分かりませんので、基本的には実行してみてエラーになった個所を潰していく感じになると思います。<br />
<br />
Consumer Preview 以降のアプリ開発者向けの変更点<br />
<a href="http://blogs.msdn.com/b/windowsappdev_ja/archive/2012/06/07/consumer-preview.aspx">http://blogs.msdn.com/b/windowsappdev_ja/archive/2012/06/07/consumer-preview.aspx</a>
<br />
<br />
移行ガイド (英語)<br />
<a href="http://go.microsoft.com/fwlink/?LinkID=251943">http://go.microsoft.com/fwlink/?LinkID=251943</a><br />
<br />
<br />
<b>(4) WinJS.xhrでHttpWebRequestを行っていた場所を見直す</b><br />
<div style="text-align: left;">
</div>
前述の移行ガイドでも見当たらなかったのですが、responseXMLの型が変更になっているみたいです。CP版の場合は、<a href="http://msdn.microsoft.com/en-us/library/windows/apps/ms757878.aspx">MSXML</a>に由来するMS独自拡張のselectNodesやselectSilgleNodeでXPath式を使って操作ができたのですが、RP版では変更(削除)されたようです。なので、これらを使っているプロジェクトの場合、実行時にエラーになります。<br />
<br />
解決方法としては、新たに<a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh702560.aspx">Selectors API</a>が使えるようになっていますので、querySelectorAllとかquerySelectorを代わりに使います。こちらは引数がCSSセレクタですので、XPath式からの書き換えも忘れずに。<br />
<br />
例えば下記のように書き換えます。<br />
<br />
<br />
<span style="background-color: #cfe2f3;">item.selectSilgleNode("title").text; // CP版</span><br />
↓<br />
<span style="background-color: #cfe2f3;">item.querySelector("title").textContent; //RP版</span><br />
<br />
<br />
Release Candidate: Did responseXML change at all? selectNodes isn't a method anymore...<br />
<a href="http://social.msdn.microsoft.com/Forums/sv-SE/winappswithhtml5/thread/2141429b-b7d3-46ef-a46b-5919e41d454f">http://social.msdn.microsoft.com/Forums/sv-SE/winappswithhtml5/thread/2141429b-b7d3-46ef-a46b-5919e41d454f</a>
<br />
<br />
<br />
<br />
<br />prinshttp://www.blogger.com/profile/09952130633048197953noreply@blogger.com0tag:blogger.com,1999:blog-5513601269679730089.post-78774311757592895662012-04-10T11:28:00.001+09:002012-07-10T22:05:59.133+09:00OpenSSLでの証明書関連コマンドメモ何回やっても覚えられないので・・・。自分用にまとめておきます。<br />
IISで作成したCSRを署名したい場合は、CAによる署名を行った後、<br />
DERに変換してやれば良いです。<br />
<br />
・秘密鍵の作成<br />
openssl genrsa -out keyfile.pem 2048<br />
<br />
・CSRの作成<br />
openssl req -new -key keyfile.pem -out csrfile.pem<br />
<br />
・自己署名<br />
openssl x509 -req -in csrfile.pem -signkey keyfile.pem -out certfile.pem<br />
<br />
・CAによる署名<br />
openssl ca -out certfile.pem -infiles csrfile.pem<br />
<br />
・CAによる失効<br />
openssl ca -revoke certfile.pem<br />
<br />
・CRL発行<br />
openssl ca -gencrl -out crl.pem<br />
<br />
・CRL変換<br />
openssl crl -in crl.pem -outform DER -out crl.der<br />
<br />
・PEM->DER<br />
openssl x509 -in file.pem -outform DER -out file.der<br />
<br />
・DER->PEM<br />
openssl x509 -inform DER -in file.der -outform PEM -out file.pem<br />
<br />
・PKCS#12作成<br />
openssl pkcs12 -export -in certfile.pem -inkey keyfile.pem -certfile rootca.pem -out file.p12<br />
<br />
・PKCS#12作成(CAチェーンつき) ca.pem内に複数証明書を入れておく<br />
openssl pkcs12 -export -in certfile.pem -inkey keyfile.pem -chain -CAfile ca.pem -out file.p12<br />
<br />
・PKCS#12から秘密鍵のみ取り出す(暗号化の必要なければ-nodesをつける)<br />
openssl pkcs12 -in input.pfx -nocerts -out output_key.pem<br />
<br />
・PKCS#12からサーバー証明書のみ取り出す<br />
openssl pkcs12 -in input.pfx -clcerts -nokeys -out output_crt.pem<br />
<br />
・RSA秘密鍵のパスフレーズ削除<br />
openssl rsa -in server.key -out server.key<br />
<br />
※ファイル名は適当ですので読み替えてくださいprinshttp://www.blogger.com/profile/09952130633048197953noreply@blogger.com0tag:blogger.com,1999:blog-5513601269679730089.post-30369324705429256042011-02-19T18:56:00.000+09:002011-02-19T18:56:19.318+09:00WASでnet.tcpやnet.pipeを使おうとするとエラーになるIISのWAS(Windowsプロセスアクティブ化サービス)によるhttp以外のプロトコルによる<br />
ホスティングを試そうと、有効なプロトコルにnet.tcpとnet.pipeを追加しました。<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-pqI-fe_qHB8/TV-SnEhw2BI/AAAAAAAAAG8/bOiuZ97kKQA/s1600/%25E7%2584%25A1%25E9%25A1%258C.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://1.bp.blogspot.com/-pqI-fe_qHB8/TV-SnEhw2BI/AAAAAAAAAG8/bOiuZ97kKQA/s320/%25E7%2584%25A1%25E9%25A1%258C.png" width="261" /></a></div><br />
<br />
そうしたら下記エラーが発生。<br />
<br />
<span class="Apple-style-span" style="background-color: #eeeeee;">プロトコル 'net.tcp' には、登録されている HostedTransportConfiguration 型が実装されていません</span><br />
<br />
相変わらず全く意味が分かりませんね・・・。<br />
原因は、Windowsの機能が一部インストールされていないからでした。<br />
デフォルトでは入っていないみたいなので、注意してください。<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-50RQKPfDSDU/TV-TZU8D3rI/AAAAAAAAAHA/zH3uKCXUaFQ/s1600/%25E7%2584%25A1%25E9%25A1%258C.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="183" src="http://3.bp.blogspot.com/-50RQKPfDSDU/TV-TZU8D3rI/AAAAAAAAAHA/zH3uKCXUaFQ/s320/%25E7%2584%25A1%25E9%25A1%258C.png" width="320" /></a></div>prinshttp://www.blogger.com/profile/09952130633048197953noreply@blogger.com0tag:blogger.com,1999:blog-5513601269679730089.post-64204606398880692912011-02-13T23:46:00.001+09:002011-02-13T23:49:34.731+09:00参照設定で System.ServiceModel.Web が出て来ないVisual Studio 2010 でWCFを使ってRESTfulサービスを作る場合は、下記参照の追加が必要です。<br />
(コントラクトでWebGetAttributeなどを指定するため)<br />
<br />
<span class="Apple-style-span" style="background-color: #eeeeee;">System.ServiceModel.Web</span><br />
<br />
VS2010のWCFテンプレートを使ってプロジェクトを作成した場合、そのままでは参照の追加に出てきません。<br />
プロジェクトのプロパティから[対象のフレームワーク]を変更してやる必要があるみたいです。<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-zazFPyCxL0Y/TVfuKDa1PAI/AAAAAAAAAG4/cU6G1pIULBM/s1600/%25E7%2584%25A1%25E9%25A1%258C.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="105" src="http://1.bp.blogspot.com/-zazFPyCxL0Y/TVfuKDa1PAI/AAAAAAAAAG4/cU6G1pIULBM/s320/%25E7%2584%25A1%25E9%25A1%258C.png" width="320" /></a></div><br />
デフォルトでは.NET Framework 4 Client Profileになっていますが、.NET Framework 4に変更します。<br />
Client Profileにはサーバーアプリケーション開発に必要なコンポーネントが含まれていないため、<br />
このような操作が必要になってきます。<br><br>prinshttp://www.blogger.com/profile/09952130633048197953noreply@blogger.com0tag:blogger.com,1999:blog-5513601269679730089.post-34973452592817738522011-01-31T01:07:00.002+09:002011-02-05T21:50:54.419+09:00URL Rewrite 2.0 でURLやサーバー変数を書き換える今回はIIS7で、URLやサーバー変数を書き換える方法のメモです。<br />
アプリケーション側の都合で構成を変えたいが、公開URLは変更したくない場合などに有効です。<br />
Apacheのmod_rewriteと同じようなことができます。<br />
<br />
導入は、Microsoft Web Platform Installer 3.0を使うのが簡単です。<br />
ますは、<a href="http://www.microsoft.com/web/downloads/platform.aspx">こちら</a>からインストールしてください。<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_48fMo63K1jo/TUV3RIV16dI/AAAAAAAAAGQ/v8GlL6_W1XU/s1600/Rewrite1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="239" src="http://3.bp.blogspot.com/_48fMo63K1jo/TUV3RIV16dI/AAAAAAAAAGQ/v8GlL6_W1XU/s320/Rewrite1.png" width="320" /></a></div><br />
[製品] - [サーバー] の中から、[URL Rewrite 2.0] を見つけて追加ボタンを押します。<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_48fMo63K1jo/TUV4iPvIsLI/AAAAAAAAAGU/QFcu0GaYdwI/s1600/Rewrite2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="221" src="http://4.bp.blogspot.com/_48fMo63K1jo/TUV4iPvIsLI/AAAAAAAAAGU/QFcu0GaYdwI/s320/Rewrite2.png" width="320" /></a></div><br />
その後、下部の[インストール]ボタンを押し、続けて同意ボタンを押し終わるのを待ちます。<br />
場合によっては依存関係にあるモジュールも自動でインストールされます。<br />
<br />
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">※ここでは詳しく説明しませんが、リバースプロキシを構築したい場合は</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"> ARR (Application Request Routing) モジュールも必要です。</div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/_48fMo63K1jo/TUV5al9oKRI/AAAAAAAAAGY/--chRsWV8Jw/s1600/Rewrite3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="219" src="http://1.bp.blogspot.com/_48fMo63K1jo/TUV5al9oKRI/AAAAAAAAAGY/--chRsWV8Jw/s320/Rewrite3.png" width="320" /></a></div><br />
インストールが完了したら、IISマネージャーを起動します。<br />
Default Web Siteを選択すると、「URL 書き換え」という機能が追加されているのが分かります。<br />
ダブルクリックするか、右上の[機能を開く]を選択して設定画面を出します。<br />
(全てのサイトにURL書き換えルールを適用したくない場合は、目的の仮想ディレクトリに移動して、<br />
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">URL書き換え設定画面を開いてください)</div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_48fMo63K1jo/TUV7sPe6GoI/AAAAAAAAAGc/ch5KQwNALCo/s1600/Rewrite4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="214" src="http://4.bp.blogspot.com/_48fMo63K1jo/TUV7sPe6GoI/AAAAAAAAAGc/ch5KQwNALCo/s320/Rewrite4.png" width="320" /></a></div><br />
右上の[規則の追加]を選択します。<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_48fMo63K1jo/TUV8sE38l8I/AAAAAAAAAGg/QDyQts0V9vo/s1600/Rewrite5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="214" src="http://3.bp.blogspot.com/_48fMo63K1jo/TUV8sE38l8I/AAAAAAAAAGg/QDyQts0V9vo/s320/Rewrite5.png" width="320" /></a></div><br />
「空の規則」を選択してOKを押します。<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_48fMo63K1jo/TUV9CQqdveI/AAAAAAAAAGk/O4IEAIxPVB4/s1600/Rewrite6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="251" src="http://3.bp.blogspot.com/_48fMo63K1jo/TUV9CQqdveI/AAAAAAAAAGk/O4IEAIxPVB4/s320/Rewrite6.png" width="320" /></a></div><br />
この画面で書き換えルールを設定します。<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_48fMo63K1jo/TUV_pAMG9sI/AAAAAAAAAGo/OK_h2VbgZNM/s1600/Rewrite7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="284" src="http://3.bp.blogspot.com/_48fMo63K1jo/TUV_pAMG9sI/AAAAAAAAAGo/OK_h2VbgZNM/s320/Rewrite7.png" width="320" /></a></div><br />
[名前]<br />
作成するルールに好きな名前を付けます<br />
<br />
[URLの一致]<br />
正規表現 or ワイルドカード or 完全一致した場合だけ書き換えることができます。<br />
正規表現での指定がオススメです。括弧で括っておくと、書き換えルールで変数として使えます。<br />
<br />
たとえば、「(.*)/(.*)/.*」とした場合、{R:n}を書き換えルールで使うことができます。<br />
<br />
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">{R:0} これはURL全体を指します</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">{R:1} これは一番目の括弧でマッチした文字列になります</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">{R:2} これは二番目の括弧でマッチした文字列になります</div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_48fMo63K1jo/TUWIt2kEU8I/AAAAAAAAAGs/I14S-YcUf7g/s1600/Rewrite8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://2.bp.blogspot.com/_48fMo63K1jo/TUWIt2kEU8I/AAAAAAAAAGs/I14S-YcUf7g/s320/Rewrite8.png" width="253" /></a></div><br />
サーバー変数だけで判断したい場合は、すべて(.*)にしておいて、[条件]で指定します。<br />
<br />
[条件]<br />
<a href="http://msdn.microsoft.com/en-us/library/ms524602.aspx">IISのサーバー変数</a>に一致した場合のみ書き換えを行いたい時は、ここで条件指定します。<br />
また、サーバー変数を書き換えルールに使いたい場合もここで指定します。<br />
書き換えルールでの指定は{C:n}になります。<br />
<br />
[サーバー変数]<br />
サーバー変数の書き換えを行いたい場合はここで指定します。<br />
事前に書き換えマップに書き換えたいサーバー変数を登録しておく必要がありますので<br />
注意してください。(URL Rewrite設定画面Topの右側メニュー[書き換えマップの表示]から行います)<br />
<br />
[アクション]<br />
URLの書き換えルールを設定します。<br />
前述の変数を利用して、http://{R:1}/{C:1}/index.htmlなどと動的な書き換えもできます。<br />
サーバー変数の書き換えだけが目的の場合はアクションは「なし」にしておきます。<br />
<br />
ルールの設定が完了したら、右上の適用ボタンを押して保存してください。<br />
すぐにルールが反映されるはずです。(IISの再起動は不要)<br />
<br />
<br />
【参考】<br />
設定方法の詳細は、下記のTechNetのページが参考になると思います。<br />
<br />
<a href="http://technet.microsoft.com/ja-jp/library/ee890818.aspx">URL 書き換えモジュールの送信ルールの作成</a><br />
<br />
<a href="http://technet.microsoft.com/ja-jp/library/ee886301.aspx">HTTP 要求ヘッダーおよび IIS サーバー変数の設定</a> (サーバー変数を書き換えたい場合)<br />
<br />
<a href="http://technet.microsoft.com/ja-jp/library/ee890820.aspx">URL 書き換え Version 2 と Application Request Routing を使用したリバース プロキシ</a><br />
<br />
<br />
【補足】<br />
IIS6の場合はURL Rewrite 2.0は使えませんが、<br />
<a href="http://iirf.codeplex.com/">IIRF (Ionic's Isapi Rewrite Filter)</a> というツールを使うと、ほぼ同じことができます。<br><br>prinshttp://www.blogger.com/profile/09952130633048197953noreply@blogger.com0tag:blogger.com,1999:blog-5513601269679730089.post-5562272029336513802010-12-20T00:01:00.000+09:002010-12-20T00:01:27.892+09:00Installer error 2869 の原因が分からない場合のヒントこのエラーの解析にかなり手間取ったのでメモしておきます。<br />
<br />
インストール中に、下記のようなエラーダイアログが出て、ロールバックしてしまいました。<br />
何回やっても駄目で、しかも特定の環境下でしか再現しない・・・。<br />
<br />
<span class="Apple-style-span" style="background-color: #eeeeee;">The dialog SetupError has the error style bit set, but is not an error dialog.</span><br />
<br />
う~ん、全く意味が分かりませんね!<br />
とりあえず、<a href="http://prins-note.blogspot.com/2010/12/setupexe.html">直前のエントリ</a>で書いた方法で、詳細ログを取るとエラーコードは2869。<br />
このエラーコードを頼りに調べていくと、<a href="http://setupanddeployment.com/windows-installer-errors/installer-error-2869-dialog-2-error-style-bit-set-error-dialog/">こちら</a>のブログを発見。<br />
<br />
要するに、直前の<b>カスタムアクションが失敗している</b>のが原因のようです。<br />
エラーメッセージからは全く想像つきませんね・・・。<br />
ログから直前のカスタムアクションを調べてみます。<br />
<br />
<span class="Apple-style-span" style="background-color: #eeeeee;">MSI (s) (BC:10) [13:23:12:269]: Invoking remote custom action. </span><br />
<span class="Apple-style-span" style="background-color: #eeeeee;">DLL: C:\Windows\Installer\MSI7330.tmp, Entrypoint: ManagedInstall</span><br />
<br />
これは、どうやら.NETのInstallerクラスを呼び出している所のようです。<br />
ProjectInstallerではレジストリの書き換えとサービス登録をやっていた<br />
のですが、レジストリの書き換えは失敗する余地がない。<br />
消去法で、サービス登録が失敗しているのでは?と考えて調べてみると、<br />
サービスがアンインストールされずに残ったままでした。<br />
今回のケースでは、手動でサービスを消したら*解決しました。<br />
<br />
* サービスは次のコマンドで削除できます(必要なサービスを誤って消さないように注意!)<br />
<span class="Apple-style-span" style="background-color: #eeeeee;">sc.exe delete [サービス名]</span><br />
<br />
【参考】<br />
Windows Installer Error Messages (MSDN)<br />
<a href="http://msdn.microsoft.com/en-us/library/aa372835(VS.85).aspx">http://msdn.microsoft.com/en-us/library/aa372835(VS.85).aspx</a><br />
<br>prinshttp://www.blogger.com/profile/09952130633048197953noreply@blogger.com0tag:blogger.com,1999:blog-5513601269679730089.post-11698654067312688232010-12-19T23:33:00.000+09:002010-12-19T23:33:56.339+09:00Setup.exeで詳細ログを出力する方法msiで詳細ログを出力できることは知っていましたが、Setup.exeでも可能なようです。<br />
リリースする場合は、InstallShieldなどで単一のSetup.exeにまとめている場合が<br />
多いと思いますが、何か問題が発生した場合の解析に便利です。<br />
<br />
まずはmsiの場合の復習。<br />
<br />
<span class="Apple-style-span" style="background-color: #eeeeee;">msiexec /i Installer.msi /L*v "C:\Install.log"</span><br />
<br />
setup.exeの場合は次の通り。<br />
<br />
<span class="Apple-style-span" style="background-color: #eeeeee;">setup.exe /v"/L*v C:\Install.log"</span><br />
<br />
/vオプションに続けてダブルクォーテーションで囲んだ形で指定すればOKのようです。<br />
<br>prinshttp://www.blogger.com/profile/09952130633048197953noreply@blogger.com0tag:blogger.com,1999:blog-5513601269679730089.post-76081933124065007342010-12-08T21:33:00.000+09:002010-12-08T21:33:40.216+09:00Google Chrome 8でMicrosoft Forefront TMGへ接続できない問題の回避方法<div>Google Chrome 8にアップデート後、Microsoft Forefront TMGへのアクセスができなくなり、</div><div>いろいろと苦労したので、忘れないようにメモ。</div><div><br />
</div><div>現象としては、TMGへアクセスするとずっとロード中のままになります。</div><div>Windows XPではキャッシュとクッキーのクリアで直ったのですが、Windows 7の場合</div><div>再インストールしても復旧せず困っていました。</div><div><br />
</div><div>いろいろ検索したところ、Chromeのフォーラムに答えを発見しました。</div><div>起動オプションとして、--use-system-sslを使えば良いみたいです。</div><div>具体的には、Chromeのショートカットのプロパティを開いて、リンク先の後ろに</div><div>これを付ければよいです。</div><div><br />
</div><div class="separator" style="clear: both; text-align: left;"><a href="http://1.bp.blogspot.com/_48fMo63K1jo/TP96mucFohI/AAAAAAAAAGI/YFOAKMLXvN0/s1600/chrome.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://1.bp.blogspot.com/_48fMo63K1jo/TP96mucFohI/AAAAAAAAAGI/YFOAKMLXvN0/s320/chrome.png" width="290" /></a></div><div><br />
</div><div><br />
</div><div>【フォーラムの該当エントリ】</div><div><a href="http://www.google.com/support/forum/p/Chrome/thread?tid=5a2f28efdf423153&hl=en">http://www.google.com/support/forum/p/Chrome/thread?tid=5a2f28efdf423153&hl=en</a></div><div><br />
</div>prinshttp://www.blogger.com/profile/09952130633048197953noreply@blogger.com0tag:blogger.com,1999:blog-5513601269679730089.post-80970282756174400542010-11-05T00:34:00.001+09:002010-11-05T00:41:12.576+09:00Visual Studioのセットアップ プロジェクトでアドバタイズショートカットを作らない方法Visual Studio付属のセットアップ プロジェクトで、スタートメニューにショートカットを<br />
作成しようとすると、必ずアドバタイズショートカットになってしまいます。<br />
これには、いろいろと弊害があり、意図しない状況で修復インストールが動いてしまったりします。<br />
<br />
厄介なことに、Visual Studioのオプションではどうすることも出来ません。(項目が無い)<br />
かといって、リリース毎にOrcaで設定をいじるのも面倒です。<br />
なので、なにか良い方法が無いか考えてみました。<br />
<br />
結論からいえば、セットアップ プロジェクトのポストビルドイベントで何とかできます。<br />
<br />
(1) 例によって、スクリプトファイルを入手するため、Windows Installer SDKをインストールします。<br />
(これはPlatform SDKの中に含まれています)<br />
<br />
(2)*.vdprojがあるプロジェクトフォルダ直下にWiRunSQL.vbsをコピーします。<br />
WiRunSQL.vbsは、デフォルトでは下記の場所にあるはずです。<br />
<br />
<span class="Apple-style-span" style="background-color: #eeeeee;">C:\Program Files\Microsoft Platform SDK\Samples\SysMgmt\Msi\Scripts\WiRunSQL.vbs</span><br />
<br />
(3)ポストビルドイベントを次のように設定します。(マクロを使っていますのでコピペでいけるはず)<br />
<br />
<div><span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;"><span class="Apple-style-span" style="background-color: #eeeeee;">cscript "$(ProjectDir)WiRunSQL.vbs" "$(BuiltOuputPath)" "INSERT INTO Property(Property,Value) VALUES('DISABLEADVTSHORTCUTS', '1')"</span></span></span><br />
<br />
<span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;"><br />
</span></span></div><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_48fMo63K1jo/TNLPFFc6WXI/AAAAAAAAAGE/21QhzIi5GJM/s1600/2.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="264" src="http://2.bp.blogspot.com/_48fMo63K1jo/TNLPFFc6WXI/AAAAAAAAAGE/21QhzIi5GJM/s320/2.PNG" width="320" /></a></div><br />
<br />
<a href="http://3.bp.blogspot.com/_48fMo63K1jo/TNLPEe3ELQI/AAAAAAAAAGA/FCzLP-WoC3M/s1600/1.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="234" src="http://3.bp.blogspot.com/_48fMo63K1jo/TNLPEe3ELQI/AAAAAAAAAGA/FCzLP-WoC3M/s320/1.PNG" width="320" /></a><br />
<br />
<div><span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;"><br />
</span></span></div><div><span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;"><br />
</span></span></div><div><span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;"><br />
</span></span><br />
<span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;"><br />
</span></span><br />
<span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;"><br />
</span></span><br />
<span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;"><br />
</span></span><br />
<span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;"><br />
</span></span><br />
<span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;"><br />
</span></span><br />
<span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;"><br />
</span></span><br />
<span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;"><br />
</span></span><br />
<span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;"><br />
</span></span><br />
<span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;"><br />
</span></span><br />
<span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;"><br />
</span></span><br />
<span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;"><br />
</span></span><br />
<span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;">【参考サイト】</span></span></div><div><div><span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;">[MSDN] Execute SQL Statements</span></span></div><div><span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;"><a href="http://msdn.microsoft.com/en-us/library/aa368568(v=VS.85).aspx">http://msdn.microsoft.com/en-us/library/aa368568(v=VS.85).aspx</a></span></span></div><div><span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;"><br />
</span></span></div><div><span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;">[DOBON.NET] アドバタイズショートカットではなく、普通のショートカットを作成する</span></span></div><div><span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;"><a href="http://dobon.net/vb/dotnet/deployment/disableadvtshortcuts.html">http://dobon.net/vb/dotnet/deployment/disableadvtshortcuts.html</a></span></span></div><div><span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;"><br />
</span></span></div><div><span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;">[DOBON.NET] MSIファイルのWindows Installerデータベースをプログラムで編集する</span></span></div><div><span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;"><a href="http://dobon.net/vb/dotnet/deployment/editwidbprogrammatically.html">http://dobon.net/vb/dotnet/deployment/editwidbprogrammatically.html</a></span></span></div></div><div><span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;"><br />
</span></span></div>prinshttp://www.blogger.com/profile/09952130633048197953noreply@blogger.com0tag:blogger.com,1999:blog-5513601269679730089.post-77817859402436379102010-10-20T22:32:00.000+09:002010-10-20T22:32:57.715+09:00Chrome 拡張機能を作ってみました (Last Tab Keeper)タブの制御を行う、簡単な拡張機能を作ってみました。<br />
<br />
Chromeって、最後のタブを閉じると自動的に終了するのですが、ウインドウ自体は閉じて欲しくない場合ありませんか?<br />
その場合、先に新規タブを出しておいて、開いているWebページを閉じることになると思います。<br />
それを少し自動化できます。<br />
<br />
最後のタブを閉じた時のイベントを拾って、新しいタブを作ればよいと気楽に考えていたのですが、<br />
どうもそのタイミングでは新しいタブが作れない模様。<br />
試行錯誤して、開いているWebページが残り1タブになったら、自動的に新しいタブを作ることにしました。<br />
人によって、合う合わないあるかと思いますが、ご興味持たれた方は是非使ってみてください。<br />
<br />
Chrome拡張機能ギャラリーに登録してありますので、下記リンクからアクセスできます。<br />
ご意見、ご感想などありましたら、twitterかコメント欄でメッセージ頂ければ嬉しいです。<br />
<br />
<a href="https://chrome.google.com/extensions/detail/ogookjjcaobcijoblfjoneggmhdlppkc?hl=ja">Last Tab Keeper</a><br />
<br />
※名前はちょっと微妙だったかも・・・。アイコンもデフォルトのままですみません。<br />
<br>prinshttp://www.blogger.com/profile/09952130633048197953noreply@blogger.com0tag:blogger.com,1999:blog-5513601269679730089.post-49516198581109761012010-10-15T00:45:00.000+09:002010-10-15T00:45:53.038+09:00終了していないスレッドを調べるクラスワーカースレッドが終了していないため、メインウインドウは消えてもプロセスが残ってしまう場合があります。<br />
その場合、原因のスレッドを突き止めて終わらない原因を修正しなければいけません。<br />
しかし、開発環境では再現できないケースなどもあると思います。その場合のデバッグ用クラスを作ってみました。<br />
<br />
基本的に、"new Thread"を"TraceableThread.CreateThread"に置換して、メインウインドウの<br />
FormClosedイベントあたりでTimerProcTraceを呼んであげるだけです。<br />
そうすると、指定ミリ秒毎に終了していないスレッドがある場合、<b>作成時</b>のスタックトレース付きでデバッグ出力に出します。<br />
開発環境が入っていない(入れられない)場合でも、<a href="http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx">DebugView</a>などで確認できます。<br />
<br />
VS2008で作りましたが、多分.NET2.0以降なら動くと思います。<br />
<br />
<pre class="c#" name="code">using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Diagnostics;
using System.Reflection;
namespace Diagnostics
{
/// <summary>
/// スレッドの追跡を行えます。
/// 終了していないスレッドを調べるのに役立ちます。
/// </summary>
public static class TraceableThread
{
private static List<Thread> m_listThread;
private static List<StackTrace> m_listStackTrace;
private static Timer m_timerRemove;
private static Timer m_timerTrace;
private static Object m_sync;
/// <summary>
/// 静的コンストラクタ
/// </summary>
static TraceableThread()
{
// 初期化
m_listThread = new List<Thread>();
m_listStackTrace = new List<StackTrace>();
m_sync = new Object();
// スレッド終了監視タイマー
m_timerRemove = new Timer(new TimerCallback(TimerProcRemove), null, 1000, 1000);
}
/// <summary>
/// スレッドの終了を監視し、スレッドリストを更新します。
/// </summary>
private static void TimerProcRemove(Object obj)
{
lock (m_sync)
{
List<Thread> remove = new List<Thread>();
// 終了しているスレッドを探す
foreach (Thread trd in m_listThread)
{
try
{
if (trd.Join(0) == true)
{
remove.Add(trd);
}
}
catch (ThreadStateException)
{
// スレッドが開始されていない場合
continue;
}
}
// リストから削除する
foreach (Thread trd in remove)
{
int nIndex = m_listThread.IndexOf(trd);
m_listThread.RemoveAt(nIndex);
m_listStackTrace.RemoveAt(nIndex);
}
}
}
/// <summary>
/// new Thread(ParameterizedThreadStart start)の代わりに呼んでください
/// </summary>
public static Thread CreateThread(ParameterizedThreadStart start)
{
StackTrace trace = new StackTrace(true);
Thread thread;
lock (m_sync)
{
m_listStackTrace.Add(trace);
thread = new Thread(start);
m_listThread.Add(thread);
}
return thread;
}
/// <summary>
/// new Thread(ThreadStart start)の代わりに呼んでください
/// </summary>
public static Thread CreateThread(ThreadStart start)
{
StackTrace trace = new StackTrace(true);
Thread thread;
lock (m_sync)
{
m_listStackTrace.Add(trace);
thread = new Thread(start);
m_listThread.Add(thread);
}
return thread;
}
/// <summary>
/// new Thread(ParameterizedThreadStart start, int maxStackSize)の代わりに呼んでください
/// </summary>
public static Thread CreateThread(ParameterizedThreadStart start, int maxStackSize)
{
StackTrace trace = new StackTrace(true);
Thread thread;
lock (m_sync)
{
m_listStackTrace.Add(trace);
thread = new Thread(start, maxStackSize);
m_listThread.Add(thread);
}
return thread;
}
/// <summary>
/// new Thread(ThreadStart start, int maxStackSize)の代わりに呼んでください
/// </summary>
public static Thread CreateThread(ThreadStart start, int maxStackSize)
{
StackTrace trace = new StackTrace(true);
Thread thread;
lock (m_sync)
{
m_listStackTrace.Add(trace);
thread = new Thread(start, maxStackSize);
m_listThread.Add(thread);
}
return thread;
}
/// <summary>
/// スレッドの終了追跡を開始します。
/// メインウインドウのFormClosedイベントで呼び出すことで、
/// 終了していないスレッドを検出することができます。
/// </summary>
public static void TraceThreadTermination(int interval)
{
if (m_timerTrace == null)
{
m_timerTrace = new Timer(new TimerCallback(TimerProcTrace), null, interval, interval);
}
}
/// <summary>
/// 終了していないスレッドをTraceに出力します。
/// </summary>
private static void TimerProcTrace(object obj)
{
lock (m_sync)
{
for (int i = 0; i < m_listThread.Count; i++)
{
Trace.WriteLine("");
Trace.WriteLine(DateTime.Now.ToLongTimeString());
Trace.WriteLine("■終了していないスレッドを検出しました!");
Trace.WriteLine("Name = " + m_listThread[i].Name + ", ManagedThreadId = " + m_listThread[i].ManagedThreadId.ToString());
Trace.WriteLine("スレッド作成時のスタックトレースは次の通りです。");
Trace.WriteLine(m_listStackTrace[i].ToString());
}
}
}
}
}
</pre>prinshttp://www.blogger.com/profile/09952130633048197953noreply@blogger.com0tag:blogger.com,1999:blog-5513601269679730089.post-75166993861151592202010-09-09T23:56:00.000+09:002010-09-09T23:56:35.984+09:00Process.WaitForExit()は本当の意味で無期限待機しない<a href="http://msdn.microsoft.com/ja-jp/library/ty0d8k56.aspx">MSDN</a>を見ると、Process.WaitForExitメソッドの引数無しバージョンの説明は次のようになっています。 <div><div><blockquote><span class="Apple-style-span" style="color: blue;">関連付けられたプロセスが終了するまで無期限に待機するように Process コンポーネントに指示します。</span></blockquote>しかし、実際の動作はProcess.WaitForExit(Timeout.Infinite)と同じですので注意しましょう。<br />
要するに、0x7FFFFFFFミリ秒後(25日後くらい)に、プロセスが終了していなくてもリターンします。(詳細は<a href="http://symbolsprose.blogspot.com/2008/04/theres-curious-little-bug-in-process.html">こちら</a>を参照)<br />
<br />
確かに、プログラム的には無期限ともいえますが、説明が紛らわしいですね。<br />
戻り値がvoidなのもいやらしい。<br />
<br />
サーバーでプロセスの異常終了を監視してメール通知するプログラムを作ったのですが、<br />
再起動メールが来て焦ってログ確認したら問題無し。原因はこれでした。<br />
<br />
</div></div>prinshttp://www.blogger.com/profile/09952130633048197953noreply@blogger.com0tag:blogger.com,1999:blog-5513601269679730089.post-14107861801798587142010-03-10T00:36:00.002+09:002010-03-10T00:48:24.877+09:00Windows7でWebDAVサーバーを構築する方法Windows7に搭載されているIIS7.5で、テスト用のWebDAVサーバーを構築しながら手順をまとめてみました。<br />
<br />
構築するのは、基本認証に対応した書き込み可能なテスト用WebDAVサーバーです。ここでは手順は紹介しませんが、公開する場合はSSLも検討した方が良いでしょう。(基本認証はパスワードが平文で流れるため)<br />
<ol><li><b>WebDAV機能のインストール</b></li>
<div>まずは、IISにWebDAVと基本認証機能をいれます。下図のように、「WebDAV発行」と「基本認証」を選択して追加します。(IISをデフォルトでインストールした状態では入っていません)</div><div><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_48fMo63K1jo/S5ZswGF_DrI/AAAAAAAAAFE/x4lUUlwCSZM/s1600-h/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/_48fMo63K1jo/S5ZswGF_DrI/AAAAAAAAAFE/x4lUUlwCSZM/s320/1.png" /></a></div><span class="Apple-style-span" style="font-family: Arial;"><span class="Apple-style-span" style="font-family: 'MS PGothic';"><span class="Apple-style-span" style="background-color: #cfe2f3;"> </span></span></span> <span class="Apple-style-span" style="font-family: Arial;"><span class="Apple-style-span" style="font-family: 'MS PGothic';"><span class="Apple-style-span" style="background-color: #cfe2f3;">注) Windows Vista / Windows Server 2008に搭載されているIIS7.0で行う場合、</span></span></span><span class="Apple-style-span" style="color: black;"><span class="Apple-style-span" style="background-color: #cfe2f3;">標準機能には含まれていませんので、</span><a href="http://www.iis.net/expand/WebDAV"><span class="Apple-style-span" style="background-color: #cfe2f3;">ここ</span></a></span><span class="Apple-style-span" style="background-color: #cfe2f3;">からWebDAV拡張を入れることで対応できます。</span></div><br />
<li><b>WebDAVユーザーを作成する</b></li>
<div>WebDAVサーバーにアクセスするときに使うユーザーを作成しておきます。コントロールパネルのユーザーアカウントから、パスワードを設定した標準ユーザーを作成してください。ここではwebdavというユーザーを作りました。
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_48fMo63K1jo/S5ZeP7mnJDI/AAAAAAAAAD0/OdohNc0He1Y/s1600-h/9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="78" src="http://3.bp.blogspot.com/_48fMo63K1jo/S5ZeP7mnJDI/AAAAAAAAAD0/OdohNc0He1Y/s200/9.png" width="200" /></a></div></div><br />
<li><b>WebDAVを有効にする</b></li>
<div>インストール直後、WebDAV機能は無効になっています。コントロールパネルの管理ツールの中からIISマネージャを起動します。左側のツリーを展開して"Default Web Site"を選択すると、右側に「WebDAVオーサリング規則」というアイコンがあると思いますので、ダブルクリックして開きます。
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_48fMo63K1jo/S5ZhBm9ftSI/AAAAAAAAAD8/WnJHTPdeAnU/s1600-h/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/_48fMo63K1jo/S5ZhBm9ftSI/AAAAAAAAAD8/WnJHTPdeAnU/s320/1.png" /></a></div>右側に、「WebDAVの有効化」というボタンがあると思いますので押します。
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/_48fMo63K1jo/S5ZiAP90Q4I/AAAAAAAAAEE/WNNXWAVDbZk/s1600-h/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/_48fMo63K1jo/S5ZiAP90Q4I/AAAAAAAAAEE/WNNXWAVDbZk/s320/1.png" /></a></div></div><br />
<li><b>WebDAVルートの作成</b></li>
<div>次に"Default Web Site"の右クリックメニューから「仮想ディレクトリの追加」を選択します。
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_48fMo63K1jo/S5Ziyj6sHZI/AAAAAAAAAEM/aoZ_CxKuvWA/s1600-h/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="147" src="http://3.bp.blogspot.com/_48fMo63K1jo/S5Ziyj6sHZI/AAAAAAAAAEM/aoZ_CxKuvWA/s200/1.png" width="200" /></a></div>今回は、"WebDAV"という名前で作成してみます。
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_48fMo63K1jo/S5UeIQYVFdI/AAAAAAAAADM/GqqYTO6P-bY/s1600-h/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="304" src="http://2.bp.blogspot.com/_48fMo63K1jo/S5UeIQYVFdI/AAAAAAAAADM/GqqYTO6P-bY/s320/5.png" width="320" /></a></div>ちなみに、物理パスにはネットワークフォルダを指定することも出来ます。 </div><br />
<li><b>NTFSのアクセス権を設定する</b></li>
<div>標準ユーザー(Usersグループのメンバー)は読み取りアクセス権しか持っていませんので、追加したwebdavというユーザーが書き込みアクセスできるようにします。左側のツリーで、先ほど作成したWebDAVという仮想ディレクトリを選択し、右クリックメニューから「アクセス許可の編集」を選びます。
<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_48fMo63K1jo/S5ZkN14YhWI/AAAAAAAAAEU/nzAMdi3BVEk/s1600-h/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="167" src="http://4.bp.blogspot.com/_48fMo63K1jo/S5ZkN14YhWI/AAAAAAAAAEU/nzAMdi3BVEk/s200/1.png" width="200" /></a></div><div class="separator" style="clear: both; text-align: center;"></div>「セキュリティ」タブを選択して、「編集」ボタンを押します。
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/_48fMo63K1jo/S5ZlAyRdcCI/AAAAAAAAAEk/1z5T3Ia8M7A/s1600-h/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://1.bp.blogspot.com/_48fMo63K1jo/S5ZlAyRdcCI/AAAAAAAAAEk/1z5T3Ia8M7A/s320/1.png" width="305" /></a></div>「追加」ボタンから、webdavユーザーを追加し、フルコントロールをチェックします。 </div><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_48fMo63K1jo/S5ZmHeV4wtI/AAAAAAAAAEs/0HNZ4HQ1nFY/s1600-h/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/_48fMo63K1jo/S5ZmHeV4wtI/AAAAAAAAAEs/0HNZ4HQ1nFY/s320/1.png" /></a></div><br />
<li><b>WebDAVのアクセス権を設定する</b></li>
<div>最後にWebDAVのアクセス権の設定を行います。新しく作った仮想ディレクトリ"WebDAV"を選択して、「WebDAVオーサリング規則」をダブルクリックします。そして、右上の「オーサリング規則の追加」ボタンを押します。
<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_48fMo63K1jo/S5Zmn6SkwiI/AAAAAAAAAE0/rpwOcNWzgYg/s1600-h/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/_48fMo63K1jo/S5Zmn6SkwiI/AAAAAAAAAE0/rpwOcNWzgYg/s320/1.png" /></a></div>「指定されたユーザー」を選択し、2.で作ったユーザー名webdavを入力します。アクセス許可には、「読み込み」と「書き込み」にチェックを入れます。
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_48fMo63K1jo/S5ZnS2gPzoI/AAAAAAAAAE8/nDi3Ws07SsA/s1600-h/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://3.bp.blogspot.com/_48fMo63K1jo/S5ZnS2gPzoI/AAAAAAAAAE8/nDi3Ws07SsA/s320/1.png" width="208" /></a></div>これで設定完了です! </div><br />
<li><b>アクセスしてみる</b></li>
<div>うまく設定できたかを確認するには、WebDAVクライアントソフトを使うのが便利です。たとえば<a href="http://www.rei.to/carotdav.html">CarotDAV</a>などをつかって接続確認してみましょう。</div></ol><br />
IIS7.0で管理コンソールが大幅に変わったり、WebDAV拡張モジュールが標準で入っていなかったりとIISを敬遠していた方もいるかと思いますが、この機会に試してみてはどうでしょうか。prinshttp://www.blogger.com/profile/09952130633048197953noreply@blogger.com0tag:blogger.com,1999:blog-5513601269679730089.post-7296628942218882722010-02-17T22:55:00.004+09:002010-02-17T23:07:21.384+09:00単一msiで多言語に対応したインストーラを作成してみるInstallShieldとかを使わないと、インストーラの多言語対応は出来ないと思い込んでいた。というか世間的にそう思われてる?ちょっと検索しただけだと、無理というものが目に付く。Visual Studioで言語ごとにしかインストーラ作れないのがなあ。(これも思い込みかもしれないが)<br />
<br />
少し本気で探してみると、下記のサイトが見つかった。アンドキュメントな方法ながらできるらしい。実際にこのとおりやってみたら、日、英、独に対応したmsiができたので、簡単にまとめてみる。<br />
<a href="http://www.installsite.org/pages/en/msi/articles/embeddedlang/">Multi-Language MSI Packages without Setup.exe Launcher</a><br />
<br />
<b>・Windows Installerの仕組み的にはどうなっているのか</b><br />
ベースとなるmsiがあり、言語トランスフォーム(*.mst)を実行時にプロパティとして指定することで動作を変更できる仕組みがあるらしい。具体的には、下記のように指定できる。<br />
<br />
<span class="Apple-style-span" style="background-color: #eeeeee;">msiexec.exe /i setup.msi TRANSFORMS=1041.mst</span><br />
<br />
英語のsetup.msiに、日本語のトランスフォーム(1041.mst)を適用して表示言語を日本語に変えることが出来る。但し、mstファイルはmsiをベースに作成しておく必要がある。(各種ツールを利用)<br />
InstallShieldなどのツールで多言語対応のSetup.exeを作成できるが、裏ではこんな動きをしているんだなと、初めて知った。<br />
<br />
<b>・実際に試してみる</b><br />
前述のサイトの紹介されている方法は、実行時に指定するmstファイルをmsiに組み込んでしまうというもののようだ。地域と言語の設定が、mstファイルを組み込んだ言語になっている場合、自動でその言語で表示できるようになる。<br />
<ol><li>まず、mstファイルの組み込みに必要なスクリプトファイルを入手するため、Windows Installer SDKをインストールする。(これはPlatform SDKの一部として含まれている)</li>
<li>次に、デフォルト言語を英語にしてビルドしたmsiと、日本語とドイツ語のmstを作成する。動作検証をするのが主目的なので、手っ取り早くInstallShieldにて作成。</li>
<li>[Windows Installer SDKのインストールフォルダ]\Samples\SysMgmt\Msi\Scripts内にある、WiSubStg.vbs及びWiLangId.vbsを、msiと同じフォルダにコピー。</li>
<div class="separator" style="clear: both; text-align: center;"></div><li>ここでスクリプトを実行。 </li>
<div><span class="Apple-style-span" style="background-color: #eeeeee;">WiSubStg.vbs setup.msi 1041.mst 1041</span></div><div><span class="Apple-style-span" style="background-color: #eeeeee;">WiSubStg.vbs setup.msi 1031.mst 1031 </span></div><div><span class="Apple-style-span" style="background-color: #eeeeee;">WiLangId.vbs setup.msi Package 1033,1041,1031</span></div></ol><div>これで完了。地域と言語の設定をドイツ語にしてsetup.msiを起動すると、ちゃんとドイツ語で表示された。アンドキュメントな方法なので、心配な点はあるが、1つのmsiで多言語UIをサポートするインストーラが作成できることは確認できた。</div>prinshttp://www.blogger.com/profile/09952130633048197953noreply@blogger.com0tag:blogger.com,1999:blog-5513601269679730089.post-28701837323105760202010-01-31T23:20:00.004+09:002010-02-19T20:31:04.393+09:00Windows Azureの日本語の料金表まとめ<div><span class="Apple-style-span" style="font-family: Arial; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;">いよいよ明日から課金開始ですね。</span></span></div><div><span class="Apple-style-span" style="font-family: Arial; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;">ちょっと前までは、料金表が英語だったような気がするのですが、先ほど<a href="https://mocp.microsoftonline.com/site/ProductCatalogPreSignin.aspx">こちら</a>を確認したら日本語がありました。</span></span><br />
<div><span class="Apple-style-span" style="font-family: Arial; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;"><br />
</span></span></div><div><span class="Apple-style-span" style="font-family: Arial; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;">現在提供されているのは4つのプラン。</span></span></div><div><span class="Apple-style-span" style="font-family: Arial; font-size: small;"><span class="Apple-style-span" style="font-size: 13px;">料金も日本円表示になっているので、ドルよりイメージしやすいかもしれません。</span></span></div><div><ul><li><span class="Apple-style-span" style="color: #474747; font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 12px; font-weight: bold;">Windows Azure Platform 導入特別プラン (<a href="http://www.microsoft.com/WindowsAzure/offers/popup.aspx?lang=ja&locale=ja-JP&offer=MS-AZR-0001P">料金表</a>)</span></li>
<li><span class="Apple-style-span" style="color: #474747; font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 12px;"><b>Windows Azure Platform 標準プラン (<a href="http://www.microsoft.com/WindowsAzure/offers/popup.aspx?lang=ja&locale=ja-JP&offer=MS-AZR-0006P">料金表</a>)</b></span></span></li>
<li><b><span class="Apple-style-span" style="color: #474747; font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 12px;">Windows Azure Platform 拡張プラン (<a href="http://www.microsoft.com/WindowsAzure/offers/popup.aspx?lang=ja&locale=ja-JP&offer=MS-AZR-0008P">料金表</a>)</span></span></b></li>
<li><b><span class="Apple-style-span" style="color: #474747; font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 12px;">Windows Azure Platform 従量課金プラン (<a href="http://www.microsoft.com/WindowsAzure/offers/popup.aspx?lang=ja&locale=ja-JP&offer=MS-AZR-0003P">料金表</a>)</span></span></b></li>
</ul><span class="Apple-style-span" style="color: #474747; font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 12px;">あと、前回のエントリーで書いた疑問点は<a href="http://blogs.msdn.com/tumada/archive/2010/01/29/windows-azure.aspx">こちら</a>を見て無事解決しました。</span></span></div><div><span class="Apple-style-span" style="color: #474747; font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 12px;"><br />
</span></span></div><div><span class="Apple-style-span" style="color: #474747; font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 12px;">(1)デプロイしているとsuspend状態であってもCPU課金が発生</span></div><div><span class="Apple-style-span" style="color: #474747; font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 12px;"> やはり、これはデプロイした時点で仮想マシンが確保される為でしょうね。</span></div><div><span class="Apple-style-span" style="color: #474747; font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 12px;"> 特別プランの25hでテストしようと考えている場合は、テスト後に必ず<b>delete</b>しないと直ぐに無料分が尽きます・・・。</span></div><div><span class="Apple-style-span" style="color: #474747; font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 12px;"><b><br />
</b></span></span></div><div><span class="Apple-style-span" style="color: #474747; font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 12px;">(2)Production環境とStaging環境に課金で差は無い</span></span></div><div><span class="Apple-style-span" style="color: #474747; font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 12px;"> ProductionとStagingの両方で動かすと、CPUはx2必要になるみたいです。</span></span></div><div><span class="Apple-style-span" style="color: #474747; font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 12px;"> これもURL以外に機能的な差はありませんので、当然といえば当然ですね。</span></span></div><div><span class="Apple-style-span" style="color: #474747; font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 12px;"><br />
</span></span></div><div><span class="Apple-style-span" style="color: #474747; font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 12px;">2010/2/19追記</span></span><br />
<span class="Apple-style-span" style="color: #474747; font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 12px;">CPU課金は1ヶ月の合計デプロイ時間で決まるわけではない模様。1時間のうち1分でもデプロイしていると1時間分課金が発生するということらしい。これは、なんか納得いかないなー。</span></span><br />
<span class="Apple-style-span" style="color: #474747; font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 12px;"><br />
</span></span></div></div>prinshttp://www.blogger.com/profile/09952130633048197953noreply@blogger.com1tag:blogger.com,1999:blog-5513601269679730089.post-12853293071945468042010-01-07T22:46:00.003+09:002010-01-07T22:48:20.795+09:00Windows AzureのCPUの課金で心配な部分2月から課金が開始されるWindows Azureだけど、本番環境に登録しようか迷い中。<br />
<div><br />
</div><div><b><a href="http://www.microsoft.com/windowsazure/offers/popup.aspx?lang=en&locale=en-US&offer=MS-AZR-0001P" target="_blank">Introductory Special</a><span style="font-weight: normal;">というプランがあって、6/31まではいくらか無料分があるらしい。</span></b><br />
</div><div><ul><li>25 hours of a small compute instance</li>
<li>500 MB of storage</li>
<li>10,000 storage transactions</li>
</ul></div><div>1月末でCTP環境が使えなくなるし、いろいろと試すために本番環境に登録したいのだが、個人でやるとなると心配な部分が多い。ストレージは十分そうだけど、CPUが足りるかどうか。<br />
</div><div><br />
</div><div>で、ぶっちゃけCPU時間が25Hで足りるかというと、<a href="http://www.microsoft.com/windowsazure/pricing/">ここ</a>を見ると以下のような記述がある。<br />
</div><blockquote><br />
<li><strong>Compute time, measured in service hours</strong>: Windows Azure compute hours are charged only for when your application is deployed. When developing and testing your application, developers will want to remove the compute instances that are not being used to minimize compute hour billing. Partial compute hours are billed as full hours.</li><br />
</blockquote><div>つまり、デプロイされていると、Stop状態であっても課金される認識でOK?<br />
</div><div>deleteするの忘れて寝てしまうと、25Hなんてすぐ終わっちゃいますね・・・。<br />
</div><div>Worker Roleも使った日には半日分です。(small instance * 2になるので)<br />
</div><div><br />
</div><div>あと、Staging環境の扱いってどうなるんですかね。探したけど、どこにも見当たらず。<br />
</div><div>なんとなくProduction環境と同じ扱いの気がしますが。StagingとProduction両方にデプロイしていると2つ分としてカウントされるんでしょうかねー?気になるところです。<br />
</div><div><br />
</div><div>ちょっと怖いので、しばらく開発環境で我慢しようかな。<br />
</div><div>まあ、MSDN Premium Subscriptionを確保できれば問題ないんだけどね・・・。<br />
<br />
</div>prinshttp://www.blogger.com/profile/09952130633048197953noreply@blogger.com0tag:blogger.com,1999:blog-5513601269679730089.post-84887438755965569802010-01-06T23:42:00.001+09:002010-01-06T23:43:25.758+09:00Web Service ClientがC:\Windows\Tempに書き込みできない例外Web参照を含むWebサービスクライアントを、Visual Studioでビルドしたときにできる [DllName].serializers.dll をデプロイに含める。<br />
そうしないと、実行時にC:\Windows\Tempに動的にファイルを作成しようとして、書き込みアクセス権がないユーザの場合に例外発生。<br />
<br />
詳細は↓参照。ジャストミートな内容。<br />
<a href="http://blogs.msdn.com/andreal/archive/2009/04/18/could-not-find-file-c-windows-temp-dll.aspx">http://blogs.msdn.com/andreal/archive/2009/04/18/could-not-find-file-c-windows-temp-dll.aspx</a>prinshttp://www.blogger.com/profile/09952130633048197953noreply@blogger.com0