C#質問

「UAC確認ダイアログを出さない方法は」でご質問させていただきましたgirouでございます。先の質問では上手くいったと思ったのですが、再度試してみましたらどうも上手く行っていませんでしたので再度質問させてください。

Program Filesフォルダにアプリケーションを配置した場合、UACが壁として立ちはだかるため、対象となるファイルをApplicationDataフォルダに作成いたしました。
具体的に言いますと、Access型データベースを Visual C# Express Edition でGUIで作成(接続の追加でデータベース ファイル名を指定)しているのですが、作成したPCでは上手く行くのですが、他のPCでは動作しません。これは、データベースファイルに接続する際にベタで次のようにパスが固定されてしまっていることに起因するのですが、これを動的に任意に変更することはできないのでしょうか。

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\XXXX\AppData\Roaming\userData.mdb

ちなみに、実行ファイルと同一フォルダに作成した場合はこの接続文字列はの部分は|DataDirectory|となっており、環境を変えても上手くいきます。(ただし、Program FilesフォルダではUACの問題が出ます)
返信
引用
評価済みの投稿
trapemiyaMVP - 投稿日  2008年10月25日 22:17:30

SpecialFolder.ApplicationDataでうまく行きませんでしょうか?

返信
引用
評価済みの投稿
girou2 - 投稿日  2008年10月26日 8:19:32

回答ありがとうございます。

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 等も試したのですが、型付データベースの場合、自動でコーディングが行われ、パス指定がXMLファイル等を含め、何箇所にも出てくるのでできなかったものです。今更データベースの変更をするよりも、今は、プログラムフォルダ以外にインストールするのが早道かなと思い始めています。
返信
引用
評価済みの投稿
回答trapemiyaMVP - 投稿日  2008年10月26日 10:44:51

なるほど。そういうことですね。以下を参考にしてみて下さい。

 

スコープがアプリケーションな接続文字列を動的に変更する方法(テスト系データベースと本番系データベースを動的に切り替える方法)
http://blogs.wankuma.com/trapemiya/archive/2008/03/21/128947.aspx

 

実際にはk_kazuさんがコメントされているようにして下さい。

 

#型付データベースは型付データセットの誤りですよね。

返信
引用
評価済みの投稿
girou2 - 投稿日  2008年10月26日 21:09:11

大変お世話になりました。

セッターを追加したうえで次のようにコーディングしたところ上手く行きました。

 

 XXXX.Properties.Settings.Default.userDataConnectionString2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + toFile;
 (toFileにはターゲットとなるAccessデータベースファイルへのパスです。)

 

partial class を使った方法はどうも上手くいかなかったので、今度また試してみたいと思います。本当にありがとうございました。
 

返信
引用
評価済みの投稿
中川 俊輔MSFT, モデレータ - 投稿日  2008年11月7日 18:24:06

こんにちは。中川俊輔 です。

 

trapemiyaさん、回答ありがとうございます。

 

girou2さん、フォーラムのご利用ありがとうございます。

有用な情報と思われたため、trapemiyaさんの回答へ回答済みチェックをつけさせていただきました。

 

今後ともフォーラムをよろしくお願いします。

それでは!

 

 

 

mshtmlを使ってブラウザコンポーネントに表示されたページ内の
ボタンを次のとおりクリックしています。

 IHTMLDocument2 document = (IHTMLDocument2)axWebBrowser1.Document;
 IHTMLElementCollection forms = document.forms;
 IHTMLFormElement form = (IHTMLFormElement)forms.item(0, 0);

HTMLInputElementClass subm = form.item("select", 0) as HTMLInputElementClass;
 subm.click();

このコードは.NET Framework 1.1 上では上手く動作するのですが
.NET Framework 2.0上ではエラーとなります。どのようにすればエラーを回避できるでしょうか。エラーはvista上のものらしく「vshost.exeは動作を停止しました」というものです。

2.0での開発はWindows vista 上でVisual C# 2005 Express Editionを使用しています。

よろしくお願いいたします。

 

返信
引用
評価済みの投稿
Kazuya UjiharaMVP - 投稿日  2007年3月6日 23:36:59

デバッガ上ではなく、コンパイル後のアセンブリでも動作しないのでしょうか?

開発製品関係はVista未対応です。

http://www.microsoft.com/japan/msdn/vstudio/support/windowsvista/faq/

Betaですが、Visual Studio 2005 Service Pack 1 Update for Windows Vista

http://www.microsoft.com/downloads/details.aspx?familyid=FB6BB56A-10B7-4C05-B81C-5863284503CF&displaylang=ja

も試してみてください。

返信
引用
評価済みの投稿
ziro - 投稿日  2007年3月7日 7:03:29

Kazuya Ujihara様

ご回答ありがとうございます。

コンパイル後のアセンブリでも動作しませんでした。
また、Visual Studio 2005 Service Pack 1 Update を
試してみたのですが、だめでした。

お手数をおかけいたします。

返信
引用
評価済みの投稿
trapemiyaMVP - 投稿日  2007年3月7日 10:08:04

axWebBrowserではなくて、WebBrowserを使って、以下のような感じではダメでしょうか?

webBrowser1.Document.All.GetElementsByName("select")[0].InvokeMember("click");

返信
引用
評価済みの投稿
Kazuya UjiharaMVP - 投稿日  2007年3月7日 11:19:47

「vshost.exeは動作を停止しました」 とあるので、ホストプロセスが意図せず起動してしまっているようにみえます。

*.vshost.exe を配置していませんか? また、次も参考になるかもしれません。

http://msdn2.microsoft.com/ja-jp/library/ms185330(VS.80).aspx

返信
引用
評価済みの投稿
回答ziro - 投稿日  2007年3月8日 8:18:08

みなさま、ご回答いただきありがとうございます。

WebBrowserを使うことは可能なのですが、過去の資産の利用を
したいと思っています。

また、このような事象は再現されているようで次のような質問が
ありました。既に解決されているようなのですが、当方としては
英語力がなく、いまひとつ理解ができないものでした。
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=442959&SiteID=1

 

.NET Framework 1.1をインストールしてもダメでした。
 

返信
引用
評価済みの投稿
Shinichi AoyagiMVP - 投稿日  2007年3月8日 10:44:10

 ziro さんからの引用
また、このような事象は再現されているようで次のような質問が
ありました。既に解決されているようなのですが、当方としては
英語力がなく、いまひとつ理解ができないものでした。
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=442959&SiteID=1
 
 

そこからリンクされている
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=179069&SiteID=1
が答えですね。
Misha Shneerson さんによると 「HogeClass クラスではなく、Hoge インターフェースを使え」 ということだそうです。どうやら non-creatable とマークされている COM オブジェクトに対する扱いが .NET Framework 1.1 と 2.0 とで変わったことが原因ということみたいです。

と言うわけで、
    HTMLInputElementClass subm = form.item("select", 0) as HTMLInputElementClass;

    IHTMLInputElement subm = form.item("select", 0) as IHTMLInputElement;
と書き換えてみてください。

返信
引用
評価済みの投稿
ziro - 投稿日  2007年3月8日 13:00:33

 Shinichi Aoyagi  様

ご回答ありがとうございます。

この場合、クリックイベントが拾えないようなのですが・・・・。

 

 

 

 

WebBrowserコントロールでYahooオークションの取引ナビのメッセージ
リンクをクリックしても「正しい手順でアクセスされていません。」
と出て正しく表示されません。何をどうすれば正しく表示されるように
なるのでしょうか。

 

WindowsVista上でVisual C# 2005 Express Editionでの開発です。

Windows2000では上手く行っています。

返信
引用
評価済みの投稿
回答ziro - 投稿日  2007年6月1日 21:02:19

自己レスです。

 

リンクをクリックしたときに新しいウインドウが開きますが、そのときに

同じブラウザでなければエラーとなる仕様のようです。

 

このため、リンクをクリックしたときに標準ブラウザではなく