» VSTOのブログ記事


VisualStudioでVSTOを使ったプロジェクトを開いていて、PCが強制終了された場合、あるいは、休止状態から復帰した場合に、リボンインターフェースでエラーがよく出ます。
無視して続けると、問題なく表示されますが、上書き保存しても、次回以降プロジェクトを開いた時に毎回同じ状態になります。
何とかならないか?

追記(2011/08/19)

ちなみに、リボンインターフェースのファイルには悪いところはありません。
新たな編集を加えると治るようです。(知らないうちにこのエラー出なくなっていた。)

追記(2011/08/20)

無視して続行すると、オブジェクトイベントの関連づけが全て消えてしまうことが発覚しました。

Private Sub Button1_Click(~省略~) Handles Button1.Click
  ~ 中略 ~
End Sub

上記のイベントプロシージャのHandles の部分が消えます。

とにかく毎回Handles 句を記述し直すのもアホらしいので、どこに原因があるのかを調べてみました。
結論からいうと、リボンインターフェースの記述自体には特に問題はありません。

小生の行った作業は次の通り。
(1)リボンインターフェースのプロシージャを全て削除する
 Imports句とPublic Class HogeHoge ~ End Classの宣言は残します。
 自分が追加したプロシージャのみ削除します。
 なお、実際には削除ではなく、メモ帳などにコピーを残しておきます。

(2)削除したプロシージャを一つずつ復活させていく。
 プロシージャを復活させる都度、リボンインターフェースにエラーが表示されないことを確認します。

(3)エラーが確認された場合は、問題のプロシージャを精査します。
 小生の場合は、プログラム記述時に、処理内容別に#region句で区切るので、#region句毎に復活させていったところ、右クリックメニューを生成するプロシージャを復活させた時にエラーがでました。
 このプロシージャには、リボンインターフェースとは関係なく自分でオブジェクトを生成し、WithEvents句で宣言したオブジェクトのイベントをHandles句で記述していました。
 これが原因なのかと考え、今度は、#Region句単位ではなく、プロシージャ単位でコードを復活させたら、何事もなかったかのようにエラーは出なくなりました。

結局のところ、原因はわかりません。


VS2008とOffice2007で作成したアドインをmsi形式で配布するためにWindowsインストーラーでセットアップファイルを作成してみた。

基本的には、松崎 剛さんのBlogに記載されている通りでOKなので補足を書きます。
http://blogs.msdn.com/b/tsmatsuz/archive/2008/03/31/vsto-v3-windows-installer.aspx

(1)VS2008を起動し、新規プロジェクトとして、VBでWord2007アドインを作成する。
.Net Framework3.5が作成するのが無難です。

(2)上記のアドイン(ソリューション)に新規プロジェクトとしてセットアッププロジェクトを追加する。
セットアッププロジェクトで設定する項目は次の通り。

(2.1)セットアッププロジェクトのプロパティ
InstallAllUsersの項目はFalseにする。
Office2007のアドインは、AllUser(LOCAL_MACHINE)にインストールすることができないので

(2.2)ファイルシステム
アプリケーションフォルダにアドインプロジェクトのプライマリ出力を追加する。
また、アドインを一度ビルドした後、*.dll.manifestと*.vstoファイルを手動で追加する。

(2.3)レジストリ
HKEY_CURRENT_USER\Software\Microsoft\Office\Word\AddIns\macroya.easyprintwに次の値を登録する
ちなみに、「macroya.easyprintw」は、アドイン識別名で、重複しなければ何でもよいようだ。
「easyprintw」だけだと、万が一他の人が同じ名前をつけたときに、アドインが正常に動かなくなるため、自分を識別する「macroya」をつけている。

(a)Description : EasyPrint for Word2007
(b)FriendlyName : EasyPrint for Word2007
(c)Manifest : [TARGETDIR]easyprintw.vsto|vstolocal
(d)LoadBehavior : 3

(a)から(c)は、文字列の値
(d)は、DWORD値

(a),(b)は、Wordに表示されるアドインの名前
(c)は、配置先。「[TARGETDIR]」は、通常は、c:\ProgramFiles\製造者名\製品名\ となるようだ。
(d)は、3を入力すると、起動時に読み込まれる。

(2.4)ユーザーインターフェース
インストールフォルダのInstallAllUserVisibleプロパティをFalseにする。
これは、上記(2.1)と同様の理由。

(2.5)起動条件
小生の環境では、セットアッププロジェクトの必須コンポーネントで、.Net Frameworkや、VSTO Runtimeを選択してもアドインのインストール時には、これらのコンポーネントはインストールされませんでした。
該当するWebページにも移動しませんでした。
なので、起動時にRuntimeの確認とWord2007の確認を行うように設定します。

ここまでで、セットアッププロジェクトをビルドすると、アドインがただしくインストールされ、使用できることが確認できました。

松崎さんのブログでは、これだけでは、対象となるアプリを起動した場合に、Inclusion List 絡みの確認メッセージが出現すると記述されています。

小生の環境では、最初にアドインをインストールしたときは、この確認メッセージは表示されませんでしたが、VSTO Runtimeなどすべて削除した状態で、再度、アドインのインストールを試みたら、英文表記で確認メッセージが表示されました。
というわけで、この確認メッセージの回避はやはり必要なようです。

この回避方法としては、回避プロジェクトをソリューションに追加すればよいと書かれており、C#でのコードも記述されています。
手動で、このプロジェクトを新規に作成し、このC#のコードをVBに変換したものをしようして、クラスに追加すると、エラーがいっぱいでて上手くいきません。
松崎さんのブログをよくよく読むと、サンプルのダウンロードサイトを案内してくれています。

http://code.msdn.microsoft.com/VSTO3MSI/Release/ProjectReleases.aspx?ReleaseId=729

このサイトでダウンロードしたファイルには、VBで記述されたサンプルも収録されています。
これを利用すればOKです。


先日の続き

現在、EasyPrint for Word2007 というWord2007用印刷アドインを作成している。
VS2010とWord2007で作成を試みたが、上手くいかなかったことは先日述べたとおり。
いろいろ試してみたが、やっぱり上手くいかない。
しかたないので、VS2008で作成してみることにした。

全部作ってからセットアップしても動かない…なんてことになると、アホらしいので(すでに2回ほどアホなことをしましたが…)今回は、最低限のアドインプログラムとセットアッププロジェクトのみでセットアップの作成を試みた。

結果、上手くいかない…^^;

いろいろ調べてみると、アドインプログラムがセットアップされたフォルダにまったくファイルが存在しない…
もう少し調べてみなければ…

追記
アプリケーションフォルダにファイルが存在しなかった原因は、セットアッププロジェクトのファイルシステムで、アプリケーションフォルダではなく、ユーザーのプログラムメニューにファイルを追加していたためでした。

そして、レジストリを HKEY_LOCAL_MACHINE に登録していたことが動作しない原因でした。
たしかに、松崎さんのBlogやMSDNを見ても、
レジストリは、HKEY_CURRENT_USERに登録されている。

しかしながら、HKEY_CURRENT_USERに登録してしまうと、当然のことながら、インストールしたユーザーしか使用できないではないか?!
と思ったら、MSDNにしっかりと書いてあった。

2007 Microsoft Office system のアプリケーションは、HKEY_CURRENT_USER に登録された Visual Studio Tools for Office アドインのみを認識します。したがって、アドインを HKEY_LOCAL_MACHINE の下に登録することによってコンピュータ上のすべてのユーザーに対して 2007 Microsoft Office system の Visual Studio Tools for Office アドインを配置することはできません。

と…
おいおい…^^;

http://msdn.microsoft.com/ja-jp/library/bb386106(v=VS.90).aspx


先日製作したEasyPrint for Word 2010を Word2007でも使えるようにするために、VS2010とWord2007環境(.NetFramework3.5)で移植している最中だ。

しかしながら、エラーが発生。

発生箇所は、ThisAddInクラスだ。
ちなみに、ThisAddInクラスには一切手を加えていない。

Fig.1 ThisAddInクラスのエラー



Fig.2 ThisAddInクラスのエラー

VS2010+Word2010環境では、Windowsインストーラーでを作成する時に.NetFramework4.0でアドインを作成していると、うまく動かないことは以前のブログにも書いたとおりだ。

それを踏まえて今回は.NetFramework3.5 で最初から作っていたのだが、これが仇になったようだ。
.NetFramework3.5では、アドイン自体がエラーになってしまうのだ。

これを.NetFramework4.0にすると、このエラーは消える。
そんなわけで、今は.NetFramework4.0でアドインを作成している。

WindowsインストーラーでのSetupファイル作成時にまた困りそうな予感が…^^;


現在製作しているEasyPrint for Word 2010 という Word2010用のアドインソフトで、種々の設定を行うために、WindowsFormを使ってダイアログウィンドウを作成している。

Enterキーを押せば「OK」ボタンと同じ働きをし、Escキーを押せば「Cancel」キーと同じ働きをするように、KeyEventを定義してみた。

しかしながら、デバッグするとイベントが発生しない。
WindowsFormのプロパティを調べてみると、KeyPreviewプロパティをTrueにしなければならないことが判明!

KeyPreviewの項目の説明を見ると、「フォーム上のコントロールのキーボードイベントがフォームと共に登録されるかどうかを決定します。」と書いてあるが、「なんのこっちゃ?!」といった感じ…一読しただけではよくわかりません。
まだまだ修行不足です…^^;

Fig.1 Formのプロパティ

ちなみに、EasyPrint for Word 2010は、Fig.2,Fig.3のような感じのアドインです。

Fig.2 EasyPrint for Word2010のイメージ

Fig.3 EasyPrint for Word2010のイメージ

Word2010専用です。
ただいま、デバッグ中ですので不具合探しにご協力いただけるモニターを100名くらい募集しています。法人でもモニターOKです。
モニター終了後は、気に入っていただけた場合は、そのままご利用ください。
ご協力いただける方には、ライセンスキーをお送りいたしますのでメールで info@macroya.jp までご連絡ください。
送付元のメールアドレス宛に、セットアップファイル(*.msi)とReadme.txt,Standard Editionのライセンスキー(630円相当を予定)をお送りいたします。

ブログ検索

ブログカレンダー

2024年12月
« 10月    
1234567
891011121314
15161718192021
22232425262728
293031  

Yahoo!ショッピング

アクセスカウンタ

  • 本日(回): 74
  • 週間(回): 942
  • 合計(回): 458065

Since 2011/07/01