レジストリ


リアル  2008-08-30 16:18:01  No: 31708  IP: 192.*.*.*

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

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

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

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

編集 削除
リアル  2008-08-30 21:24:01  No: 31709  IP: 192.*.*.*

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

誰かわかる人いますか?

編集 削除
igy  2008-08-30 21:26:37  No: 31710  IP: 192.*.*.*

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

編集 削除
igy  2008-08-30 21:28:35  No: 31711  IP: 192.*.*.*

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

編集 削除
リアル  2008-08-30 21:39:58  No: 31712  IP: 192.*.*.*

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

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

編集 削除
igy  2008-08-30 21:57:01  No: 31713  IP: 192.*.*.*

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

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

編集 削除
リアル  2008-08-30 22:05:31  No: 31714  IP: 192.*.*.*

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

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

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

編集 削除
igy  2008-08-30 22:14:20  No: 31715  IP: 192.*.*.*

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

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

編集 削除
リアル  2008-08-30 22:27:27  No: 31716  IP: 192.*.*.*

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

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

方法をお願いします。

編集 削除
igy  2008-08-30 22:40:57  No: 31717  IP: 192.*.*.*

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

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

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

でどうでしょう?

編集 削除
リアル  2008-08-30 22:50:25  No: 31718  IP: 192.*.*.*

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

編集 削除
ofZ  2008-08-30 23:06:40  No: 31719  IP: 192.*.*.*

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

編集 削除
めるめる  2008-09-09 14:22:27  No: 31720  IP: 192.*.*.*

どうしても
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 14:34:02  No: 31721  IP: 192.*.*.*

ちょっとサンプルが適切でなさそうなので訂正です。
問題なく書き込めました。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;

編集 削除