[Делфи] HKEY_LOCAL_MACHINE

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by vasykas, 8 Jan 2015.

  1. vasykas

    vasykas Banned

    Joined:
    7 Mar 2011
    Messages:
    963
    Likes Received:
    137
    Reputations:
    37
    Всем привет.
    Вообщем такая проблемка:
    не могу в реестр внести..
    Code:
    var
      Keys: HKey;
    begin
    path1 = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run';
     if  RegOpenKeyEx($80000002, PChar(path1), 0, Longword($F003F), keys)=0 then;
     RegSetValueEx(keys, ExtractFileName(ParamStr(0)), 0, 1, PChar(WinDirStr+'\' + ExtractFileName(ParamStr(0))), length(ParamStr(0))+2);
    end;
    
    предупреждение не выводит и не пишет в реестр.
    делаю так
    Code:
    var   reg:Tregistry;  
     begin 
      reg:=Tregistry.Create;  
      reg.RootKey := $80000002;    
      reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',false);
      reg.WriteString(ExtractFileName(ParamStr(0)),PChar(WinDirStr+'\' + ExtractFileName(ParamStr(0))));
      reg.Free;
    
    так выводит предупреждение и всеровно не пишет
    подскажите как можно получить права или обойти все это.
     
  2. qaz

    qaz Elder - Старейшина

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75

    Для прав, открывешь приложение с правами администрратора, но для этого рздела права ненужны.

    ПРоблема скорее всего в том что у тебя приложение 32х, для него в реестре есть раздел Wow6432Node\Microsoft\Windows\CurrentVersion\Run , а в тот что пишешь ты предназначен для 64х, но если ты серовно хочешь записать именно в него, то открывай ключ с флагом KEY_WOW64_64KEY
     
  3. vasykas

    vasykas Banned

    Joined:
    7 Mar 2011
    Messages:
    963
    Likes Received:
    137
    Reputations:
    37
    Раздел Wow6432Node\Microsoft пустой.
    От имени админа запускаю тоже не прописывает,
    а вот запускаю в режиме дебуга в делфи прописывает.
    Пытался этим:
    Ссылка
    но тока на XP.
     
  4. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,317
    Reputations:
    1,557
    Может ":=", а не "="?
     
  5. vasykas

    vasykas Banned

    Joined:
    7 Mar 2011
    Messages:
    963
    Likes Received:
    137
    Reputations:
    37
    Ссори я там не дописал эта константа.
    Code:
    const    
      path1 = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run';
    
     
  6. alexey-m

    alexey-m Elder - Старейшина

    Joined:
    15 Jul 2009
    Messages:
    518
    Likes Received:
    100
    Reputations:
    37
    Ну во-первых, если ты пытаешься писать в реестр через айпишку напрямую, а не через обертку TRegistry, то хотя бы не поленись зайти в msdn и почитать, что зачем и в каком порядке вызывается, и какой результат может быть получен, это избавит от много потерянного в пустую времени. В TRegistry при невозможности записи бросается исключение, какое оно у тебя?
    Во-вторых твой код очень может быть подозрителен аверам, как попытка прописать себя в автозагрузку из папки %windir% и приложение будет расцениваться, как не доверенное и они благополучно "лишают" тебя прав на запись в данный раздел, чего, возможно, не происходит под отладкой, так как приложение запускается в контексте ide
     
    #6 alexey-m, 10 Jan 2015
    Last edited: 10 Jan 2015
    1 person likes this.
  7. vasykas

    vasykas Banned

    Joined:
    7 Mar 2011
    Messages:
    963
    Likes Received:
    137
    Reputations:
    37
    Точно, я чет не подумал откуда лучше писать в регистр
    без проблем(я имею ввиду директорию). спасибо...
    да , если в коде писать ветку так :
    reg.RootKey := $80000002;
    и делать через обертку TRegistry
    то антивирусники ругаються, а если через:
    Regini:TRegIniFile;
    то молчат...
    Спасибо всем.