権限昇格の確認を出さないプロダクトIDの取得方法

このQ&Aのポイント
  • Visual Studio2013を使用して、C#とC++を使った開発を行っています。C++でWindowsのレジストリを読む処理を書いたところ、管理者権限でないと読めない問題が発生しました。
  • ネットの情報を参考に、Visual Studioでマニフェストファイルを作成し起動時に管理者に昇格させるようにしました。しかし、レジストリを読む処理を行う際、常に権限昇格の確認ダイアログが表示されます。
  • また、UACが有効だとプログラム内からexeを起動できなくなる可能性があるとの記事も見つけました。UACを無効にすることで解決する場合もあるようです。
回答を見る
  • ベストアンサー

権限昇格の確認を出さないプロダクトIDの取得方法

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を表示するアプリを見たことであるので何かしらやり方はあるのでは?と思っています。

  • fenri
  • お礼率50% (11/22)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

読み出すだけなら,Usersの権限で可能です。 読めなかった,という時のRegQueryValueExなりのAPIの戻り値は,何でしたか。 実は64bit OS上の32bit ProcessでHKLM\SOFTWARE\Wow6432Nodeを見に行っていた,ということはないでしょうか。 http://msdn.microsoft.com/en-us/library/aa384129.aspx を参考に,KEY_WOW64_64KEYを常時指定してもよいでしょう。 なお,昇格が必要なアプリケーションをUACのダイアログなしで起動する方法は,基本的に昇格済みのプロセスから起動するしかありません。 そもそも昇格が本当に必要かは調べる必要がありますが。

関連するQ&A

  • UACの権限昇格の確認ダイアログについて

    環境:Windows7+VS2012(VC++) WindowsXPの時代に、INIファイルをコピーするプログラムを作成したのですが、それをWindows7へ移植したのですが、インストールフォルダを ProgramFiles にすると、UACの権限昇格の確認ダイアログが表示されてしまいます。 これを表示させないようにすることは可能なのでしょうか?

  • 非管理者アカウントで管理者確認ダイアログを非表示

    管理者でないアカウントでUAC昇格確認ダイアログを非表示にするショートカットの作成方法を探しています。 UAC確認ダイアログとは、管理者権限で実行した時にでてくるアカウント名とパスワード名を聞かれるあれです。 UACを無効する以外の方法でお願いします 使用OSはWindows7です

  • VC Express ユーザー権限での使用方法

    Microsoft Visual C++ 2010 Express を、Administrator 権限のない(インストールできない)状態で使う方法を、ご存知の方がいらっしゃいましたら教えていただきたくお願いします。 推奨される条件ではないかもしれませんが、そこを可能にする方法をお願いします。 レジストリを編集すれば使えるのでしょうか・・ cl.exe やその他関連ファイルへのパスを一通り通しても、 「cl : コマンド ライン error D8027 : 'C:\My Program Files(自作フォルダ)\Microsoft Visual Studio 10.0\VC\BIN\c1xx.dll' を実行できません」というエラーが出て、コンパイルもできませんでした。 OS : Windows XP 用途 : コマンドラインベースの実行ファイルを、 cl, link, nmake などコマンドラインツールを使って(GUIのウィザード類を使わず)ビルドしたいと考えております。

  • gdiplus.dllを使わないプログラム開発

    はじめまして、 ”Microsoft Visual C++ 2008”にてダイアログベースのプログラムを書いています。 windows2000に対応するために、gdiplus.dllを使用しないプログラムを作成したいのですが、 新規作成したプロジェクトをそのままビルドしただけでもgdiplus.dllが読込まれてしまいます。 読込まなくするには、どのように設定を行なえばよいのでしょうか。 それとも”Visual C++ 2008”ではgdiplus.dllを使用しないダイアログベースのプログラム開発は不可能なのでしょうか。 動作対象OS:win2000(SPなし)以降 開発環境: 言語:Visual C++ 2008(visual studio 2008 professional edition) テンプレート:MFCアプリケーション アプリケーションの種類:ダイアログベース 以上、よろしくお願いいたします。

  • Windows CE プログラミング環境

    訳あって,Windows CEマシンのプログラムの開発をしたいのですが, 開発環境をどのように揃えたらよいのかわかりません。 何を揃えれば,プログラムが開発できるか教えていただけないでしょうか。 手元には, Visual Studio .net 2003と,Visual C++ 6.0 があります。知り合いに聞いたところ,マイクロソフトから, 開発キットをダウンロードすればいいらしいと聞いたのですが, その知り合いも経験が無く,よくわからないとのことです。 最低限, ウィンドゥが開いて,Helloだけを表示するプログラム が書ければあとはなんとかなると思うのですが, 揃えるべき環境とその揃え方がわからないと, 全くスタートできないので,困っています。 どなたか,ご教授いただけると助かります。

  • UACを久しぶりにオンにしたところ、ほとんどのUACでの権限昇格が必要

    UACを久しぶりにオンにしたところ、ほとんどのUACでの権限昇格が必要な操作ができなくなりました。 どうすればいいのでしょうか? エラー内容は、指定されたサービスは無効であるか、または有効なデバイスが関連付けられていないため、開始できません。と出ます。 例えば、コンピューターから右クリックで管理を押すと、管理ページに飛ばすにこのメッセージが出て、キャンセルされます。 システムの復元、OSの入れ直しなども全てできません。 インストール系の行動も無効にされています。 管理者権限として実行、という操作も意味がありません。 この状態になった後、あるシステムをいじってみようとした時に、管理者権限に昇格させようとした時に、予期せぬエラーが発生したため終了します。と出た事がありますので、それ関係だとは思うのですが… もう一つ、このメッセージが出ずに終了してしまうのが、ユーザーアカウント制御関連の行動、保護者の制限などのページを開こうとした時です。 クリックするとページが一瞬だけ出て強制終了されてしまいます。 アカウントは一つしか製作しておらず、いま使っているアカウントがadministratorです。 コマンドプロンプトは起動しますが、エディタなどは起動不可です。 今までに検索して、試してみたのがいくつかあるのですが、ほとんどがUAC権限がないとできない行動ばかりで設定変更までたどり着けませんでした。 唯一できたのがレジストリから変更するこれなのですが、 ttp://pasofaq.jp/windows/startmenu/exefile.htm エディタを出す方はできないので、一番目の方法をとったのですが、効果はありませんでした。 セキュリティはマカフィーの最新版を使っています、スキャンは何度もしたのでウイルスの可能性は低いと思います。 どうかよろしくお願いします。

  • Visual Studio 6.0 Professional → Visual Studio 2005 Professional

    質問1 現システムで下記開発環境を用いて、開発したシステムがあります 本システムをVisual Studio 2005 Professional のみで再開発することは可能でしょうか? 現システム  1.Visual Studio 6.0 Professional   Visual Basic 6.0 Visual C++ 6.0  2.Borland C++ Builder 6 Professional 質問2  Visual Studio 6.0 Professional(Visual Basic 6.0 Visual C++ 6.0)で開発したプログラムを Visual Studio 2005 Professionalでコンパイルすることは可能なのでしょうか?

  • 特定プロセスの権限情報を取得できる?

    お世話になります。 WindowsVista以降において権限周りが厳しくなったことで、UIPIにより別プロセスのウィンドウへのPostMessage等がブロックされるケースが出て難儀しています。 対応策を調べたところ、自アプリが昇格しないで通信する方法と、昇格する方法があるようですが、 昇格しない場合はインストール先が制限されること、最初から昇格していては不要な場合までも高い権限レベルで起動してしまうことから、アプリ実行中に必要な場合だけ昇格する方向を模索しています。 通信周りをCOM化すれば通信可能らしい、というところまでは調べたのですが、必要な場合かどうかの判定をどうすれば良いかが分かっていません。 VC++で通信相手のウィンドウハンドルを取得したところから、そのウィンドウを持つプロセスの権限情報を取得可能でしょうか? また、自アプリの現在の権限レベルを確認する手段はあるでしょうか? 以上です。宜しくお願いします。

  • 英語環境でのダイアログ表示のズレ

    下記の環境にて、ダイアログ表示のプログラムを作成し、日本語環境のWindowsXPにて、動かしてみたところ、ダイアログ表示にズレがありました。英語環境では、想定どおりの表示になります。 原因/解決法をご存知の方がおられましたら、ご教授願います。 <開発環境> ・英語環境 Windows XP ・英語環境 Visual Studio 2005(Visual Basic.net) 以上。

  • マニフェストを使用せずに、管理者権限がないユーザの場合は、管理者権限昇格のダイアログを出したい。

    お世話になります。 VC++ .net 2003を使用して、開発しております。 下記の流れの処理を作りたいと思っているのですが、(4)の箇所の実現方法がまったくわかりません。 起動直後じゃないので、マニフェストは使えないと思うのですが、その他の関数でも結構ですので実現方法教えていただければと思います。 ------流れ-------- (1)EXEを起動 (2)あるボタンを押す。 (3)現在のユーザが管理者権限が否かを判定 (4)管理者じゃなければ、昇格させる。 お手数ですが、何卒よろしくお願いします。

専門家に質問してみよう