C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: VistaとXPはちがうの?


(過去ログ 74 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■43248 / inTopicNo.1)  VistaとXPはちがうの?
  
□投稿者/ あきら (3回)-(2009/11/03(Tue) 22:41:46)

分類:[VB.NET/VB2005 以降] 

アプリケーションのコンポーネントでハンドルされていない例外が発生しました。
「続行」をクリックするとアプリケーションはこのエラーを無視し続行しようとします。
こんなエラーがでます。解決策はありますか。
内容は、VB2008でWinアプリで作成しています。
アプリケーションのコンポーネントでハンドルされていない例外が発生しました。
「続行」をクリックするとアプリケーションはこのエラーを無視し続行しようとします。
レジストリキー'HKEY_CLASSES_ROOT¥.ashへのアクセスが拒否されました
とエラーがでます。XPだとでないのですがVistaででるのは何故でしょうか?



引用返信 編集キー/
■43250 / inTopicNo.2)  Re[1]: VistaとXPはちがうの?
□投稿者/ Azulean (475回)-(2009/11/03(Tue) 23:35:03)
2009/11/03(Tue) 23:40:43 編集(投稿者)

Windows Vista 及び Windows 7 では HKEY_LOCAL_MACHINE 以下への書き込みは標準ユーザ権限では実行できません。
管理者ユーザとして作られているアカウントであっても、通常使用している間は標準ユーザ権限となります。
このあたりは、ユーザアカウント制御(UAC)について調べてください。

開発者向け情報としては、Windows 7 関連の所に情報があります。
大部分は Windows Vista でも同じことが言えます。
(HKEY_CLASSES_ROOT も HKEY_LOCAL_MACHINE 以下にあるキーを仮想的に見せたもののはず)
http://msdn.microsoft.com/ja-jp/windows/dd883236.aspx


これを踏まえて取るべき対策の候補としては下記が考えられます。

(1) HKEY_CLASSES_ROOT にアクセスしないようにする。
(2) HKEY_CLASSES_ROOT へのアクセスを読み取りのみとするように、コードを書き換える。
(3) HKEY_CLASSES_ROOT への書き込みが必要な部分を分離し、管理者権限で実行するようにする。
(4) HKEY_CLASSES_ROOT への書き込みがメインである場合は、プログラム自体を管理者権限で実行してもらうようにする。(プロジェクトのプロパティあたりで指定できたはず)

引用返信 編集キー/
■43251 / inTopicNo.3)  Re[2]: VistaとXPはちがうの?
□投稿者/ あきら (5回)-(2009/11/03(Tue) 23:46:56)
No43250 (Azulean さん) に返信
> 2009/11/03(Tue) 23:40:43 編集(投稿者)
>
> Windows Vista 及び Windows 7 では HKEY_LOCAL_MACHINE 以下への書き込みは標準ユーザ権限では実行できません。
> 管理者ユーザとして作られているアカウントであっても、通常使用している間は標準ユーザ権限となります。
> このあたりは、ユーザアカウント制御(UAC)について調べてください。
>
> 開発者向け情報としては、Windows 7 関連の所に情報があります。
> 大部分は Windows Vista でも同じことが言えます。
> (HKEY_CLASSES_ROOT も HKEY_LOCAL_MACHINE 以下にあるキーを仮想的に見せたもののはず)
> http://msdn.microsoft.com/ja-jp/windows/dd883236.aspx
>
>
> これを踏まえて取るべき対策の候補としては下記が考えられます。
>
> (1) HKEY_CLASSES_ROOT にアクセスしないようにする。
> (2) HKEY_CLASSES_ROOT へのアクセスを読み取りのみとするように、コードを書き換える。
> (3) HKEY_CLASSES_ROOT への書き込みが必要な部分を分離し、管理者権限で実行するようにする。
> (4) HKEY_CLASSES_ROOT への書き込みがメインである場合は、プログラム自体を管理者権限で実行してもらうようにする。(プロジェクトのプロパティあたりで指定できたはず)
>
ありがとうございます。
(3) HKEY_CLASSES_ROOT への書き込みが必要な部分を分離し、管理者権限で実行するようにする。これをおこないたのですが、VB2008で可能でしょうか?
引用返信 編集キー/
■43252 / inTopicNo.4)  Re[3]: VistaとXPはちがうの?
□投稿者/ 囚人 (430回)-(2009/11/04(Wed) 00:56:15)
>(3) HKEY_CLASSES_ROOT への書き込みが必要な部分を分離し、管理者権限で実行するようにする。これをおこないたのですが、VB2008で可能でしょうか?

↑の部分だけ別のプロセスとして起動し、昇格させるのが常道でしょうね。
要は、別のexeを作って、そのファイルに権限昇格させるためのマニフェストを記述すればOKです。
引用返信 編集キー/
■43253 / inTopicNo.5)  Re[3]: VistaとXPはちがうの?
□投稿者/ Azulean (476回)-(2009/11/04(Wed) 01:09:32)
No43251 (あきら さん) に返信
> (3) HKEY_CLASSES_ROOT への書き込みが必要な部分を分離し、管理者権限で実行するようにする。
> これをおこないたのですが、VB2008で可能でしょうか?

分離するのは、管理者権限が必要な部分を自分で切り出して、別のアプリケーションにするだけです。
こういったやり方があるというものではありませんので、ご自身でどこが管理者権限を必要とするか、考えてください。
(必要最小限にすべきです)

管理者権限を要求するマニフェストを埋め込むようにするには、Visual Basic 2008 の場合、プロジェクトのプロパティのアプリケーションタブにある「UAC 設定の表示」ボタンを押して、開いたマニフェストファイル(app.manifest)を変更する必要があります。
どれを選ぶとどうなるかについては、コメントに書いてあることをキーワードに調べてください。

分からない、あるいは不安であれば、調べて分かったことを明記してご質問ください。
引用返信 編集キー/
■43265 / inTopicNo.6)  Re[3]: VistaとXPはちがうの?
□投稿者/ とっちゃん (430回)-(2009/11/04(Wed) 12:04:51)
とっちゃん さんの Web サイト
No43251 (あきら さん) に返信

> (3) HKEY_CLASSES_ROOT への書き込みが必要な部分を分離し、管理者権限で実行するようにする。これをおこないたのですが、VB2008で可能でしょうか?

ざっと見た限り、拡張子の関連付けを行いたいと読めました。

インストーラを用意するでは解決策にはならないのでしょうか?

Std以上なら、VSのセットアッププロジェクトが手軽ですし、Express なら ClickOnce でCD配布とすれば、Web経由せずに配布できますよ。
引用返信 編集キー/
■43298 / inTopicNo.7)  Re[4]: VistaとXPはちがうの?
□投稿者/ あきら (6回)-(2009/11/04(Wed) 21:27:05)
No43265 (とっちゃん さん) に返信
> ■No43251 (あきら さん) に返信
>
>>(3) HKEY_CLASSES_ROOT への書き込みが必要な部分を分離し、管理者権限で実行するようにする。これをおこないたのですが、VB2008で可能でしょうか?
>
> ざっと見た限り、拡張子の関連付けを行いたいと読めました。
>
> インストーラを用意するでは解決策にはならないのでしょうか?
>
> Std以上なら、VSのセットアッププロジェクトが手軽ですし、Express なら ClickOnce でCD配布とすれば、Web経由せずに配布できますよ。


HKEY_LOCAL_USERに拡張子を登録することで解決しました。
皆さんありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -