レジストリ


リアル  2008-08-31 01:18:01  No: 31708

以前より趣味でDelphiで開発をいこなっております。

このたび、初めてレジストリというものを触ってみようと思います。
私の製作した、アプリをログイン時に起動させようと思い、調べたところ

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

コチラに追加したら良いとのことなのですが、
例えば

C:\test.exe を上記のレジストリに記入して起動させる方法を
よろしくお願いします。


リアル  2008-08-31 06:24:01  No: 31709

XPだとできたのですが、VISTAだと失敗しましたになります。

誰かわかる人いますか?


igy  2008-08-31 06:26:37  No: 31710

レジストリへのアクセスに関しては、TRegistry を使用すれば
よいかと思います。


igy  2008-08-31 06:28:35  No: 31711

あ、レジストリへのアクセスに関しては解決したみたいですね。
失礼しました。


リアル  2008-08-31 06:39:58  No: 31712

igy様ありがとうございます。

どうやらVISTAだと普通にしたら失敗するみたいです。
書き込む際の権限関係ですょうか?


igy  2008-08-31 06:57:01  No: 31713

>書き込む際の権限関係ですょうか?

Vista に関しては詳しくないのですが、
ソースコード上で、何をしている箇所で、エラーが表示するのですか?


リアル  2008-08-31 07:05:31  No: 31714

コンパイルは無事にすみます、XPでも正常に動作します、
VISTAですと、レジストリに書き込む動作で書き込みに失敗という、WINSOWSの警告窓がでます。

書き込む際の権限ですね、以前この掲示板でVISTAではSystem32へのファイルの書き込みができないという物もありました。

書き込み当の作業を管理者権限でおこないたいのですが。。。


igy  2008-08-31 07:14:20  No: 31715

アイコンに盾のマークを付けるには?
https://www.petitmonte.com/bbs/answers?question_id=5815

にあるような方法で、管理者権限で動作させてみるのはどうでしょう?


リアル  2008-08-31 07:27:27  No: 31716

すいません拝見させていただきましたが、いまいち意味が・・・

アプリを実行した後に管理者権限にエレベーションさせるということでしょうか?

方法をお願いします。


igy  2008-08-31 07:40:57  No: 31717

したい事は、
   作成したアプリをVistaでは管理者権限で動作させる
というので、よろしいのですよね。

それでしたら、
先ほどの“アイコンに盾のマークを付けるには?”にもあります。

Delphiで作成したアプリケーションをマニフェストにて管理者権限ダイアログを表示するには
http://mam.dnsalias.net/mytech/show.php?cd=96

でどうでしょう?


リアル  2008-08-31 07:50:25  No: 31718

やはり、どうしても管理者権限ダイアログはでてしまうのですか?


ofZ  2008-08-31 08:06:40  No: 31719

> やはり、どうしても管理者権限ダイアログはでてしまうのですか?
Vistaはそういう仕様です。
UACでも無効にしてあれば、出ないはずだけど。


めるめる  2008-09-09 23:22:27  No: 31720

どうしても
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
じゃないとダメですか?

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
でも良いのであれば、下記の方法で、VISTA でも XP でも問題なくレジストリを読み書きできます。
VISTA では UAC の影響を受けずに、確認なしで動作しています。

レジストリの読み込み時にキーが存在しなかった場合のデフォルト値も指定できるので便利です。
※ただし、HKEY_CURRENT_USER にしかアクセスできないようです。

uses Registry;

  private
    { Private declarations }
    inifile:   TRegIniFile;

// レジストリ読み込み
begin
  inifile := TRegIniFile.Create('SoftWare\HogoCorp');
  With inifile do
  begin
    Label1.Caption := ReadString('HogeSoft', 'String1', 'デフォルト値');
    Label2.Caption := ReadString('HogeSoft', 'String2', 'デフォルト値');
  end;
  inifile.free;
end;

// レジストリ書き込み
begin
  inifile := TRegIniFile.Create('SoftWare\HogeCorp');
  With inifile do
  begin
    WriteString('HogeSoft', 'String1',  Label1.Caption);
    WriteString('HogeSoft', 'String2',  Label2.Caption);
  end;
end;


めるめる  2008-09-09 23:34:02  No: 31721

ちょっとサンプルが適切でなさそうなので訂正です。
問題なく書き込めました。D2007 Pro + VISTA

procedure TForm1.Button1Click(Sender: TObject);
begin
  inifile := TRegIniFile.Create('SOFTWARE\Microsoft\Windows\CurrentVersion');
  With inifile do
  begin
    WriteString('Run', 'test',  'c:\text.exe');
  end;
end;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加