dポイントプレゼントキャンペーン実施中!

Visual Studio2013で 一つのソリューションの中でC#とC++を使って開発を行っています。
C++でWindowsのレジストリを読む処理を書いたところ開発環境では問題なく動作したのですが
別のPCでは管理者権限として実行しないと読めませんでした。

そこでネットの情報を参考にVisual Studioでマニフェストファイルを作成し起動時に管理者に昇格させるようにしました。
レジストリを読む処理は問題なく動作したのですが、必ず「権限昇格の確認ダイアログ」が出てしまいます。

ネットで調べたところ、プログラムを「Program Files」以下に置かなければでないような記述を見たので
\C直下に置いたのですが変わらず「権限昇格確認ダイアログ」が出てしまいます。

「権限昇格確認ダイアログ」を出さずにレジストリを読むために何が必要でしょうか?
(作成したexeのプロパティ-互換性 から特権レベルを変更するではなく、プログラムでどうにか出来ないかを考えています)

また、UACが有効だと問題が起こる可能性があるとの記事も見つけました。
UACは有効にしないほうがよいのでしょうか?
http://dobon.net/vb/dotnet/system/uac.html
確かに「権限昇格の確認ダイアログ」が出るようになってからプログラム内部からexeを起動している箇所で実行環境だとexeの起動が出来なくなってしまいました。

よろしくお願いします。


開発環境
 Windows7 32bit
 Visual Studio2013 インストール済
 
実行環境
 Windows7 32bit
 .Net 4.5 インストール済
 VisualStudio 2013 の Visual C++ 再頒布可能パッケージインストール済
 
読みたいレジストリ
 WindowsのProductID
 
※VBで作られたアプリですが、「権限昇格の確認ダイアログ」を出さずに
ProductIDを表示するアプリを見たことであるので何かしらやり方はあるのでは?と思っています。

A 回答 (1件)

読み出すだけなら,Usersの権限で可能です。


読めなかった,という時のRegQueryValueExなりのAPIの戻り値は,何でしたか。
実は64bit OS上の32bit ProcessでHKLM\SOFTWARE\Wow6432Nodeを見に行っていた,ということはないでしょうか。
http://msdn.microsoft.com/en-us/library/aa384129 …
を参考に,KEY_WOW64_64KEYを常時指定してもよいでしょう。

なお,昇格が必要なアプリケーションをUACのダイアログなしで起動する方法は,基本的に昇格済みのプロセスから起動するしかありません。
そもそも昇格が本当に必要かは調べる必要がありますが。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!