none
為何在XP環境我改寫HKEY_LOCALMACHINE的機碼正常 在VISTA發生拒絕存取 RRS feed

  • 問題

  •  

    請教各位先進

    我在XP環境中寫了一個小程式可以改寫登錄檔內的HKEY_LOCALMACINE

    但是 我安裝到vista的環境之後

    這隻小程式卻出現了錯誤畫面

    上述寫著

    拒絕登入機碼 "HKEY_LOCALMACHINE\SOFTWARE\XXXX"

     

    這個問題該如何解決  煩請各位先進們指點迷津  謝謝

     

    以下是程式碼的內容

    String TestKey = @"SOFTWARE\XXXX";
    RegistryKey cu = Registry.LocalMachine;

    string user = Environment.UserDomainName + "\\" + Environment.UserName;

    RegistrySecurity mSec = new RegistrySecurity();

    RegistryAccessRule rule = new RegistryAccessRule(user,

                                 RegistryRights.ReadKey | RegistryRights.WriteKey | RegistryRights.Delete,
                                 InheritanceFlags.ContainerInherit,
                                 PropagationFlags.None, PropagationFlags.InheritOnly,
                                  AccessControlType.Allow  );
    mSec.AddAccessRule(rule);

    rule = new RegistryAccessRule(user,
                    RegistryRights.ChangePermissions,
                    InheritanceFlags.ContainerInherit,
                    PropagationFlags.InheritOnly, | PropagationFlags.NoPropagateInherit,
                    AccessControlType.Allow);
    mSec.AddAccessRule(rule);

     RegistryKey rk = cu.CreateSubKey(TestKey,
                    RegistryKeyPermissionCheck.ReadWriteSubTree, mSec);

                    
            }

    2008年6月11日 上午 09:31

解答

所有回覆

  • 在 Windows Vista 中,要對系統層次的資料做修改,必須要先通過 UAC 的授權才行。

    請自行以 UAC 搜尋討論區。

    2008年6月11日 上午 10:04
    版主
  • 謝謝您給我的方向

    對於存取的問題已獲得解決 是已經可以寫入機碼

     

    但另外又有一難題

    由於要寫入HKEY_LOCALMACHINE 需要 requireAdministrator 的權限

    所以我在專案裡面加入了 app.manifest

    在裡面 我將 <requestedExecutionLevel level="asInvoker" uiAccess="false" />

    改成<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

     

    在執行過程中  對於機碼寫入是沒問題

    但是要建置發行的時候 就會出現一個錯誤

    ClickOnce does not support the request execution level 'requireAdministrator'. XXXXX

     

    查了msnd 說 ClickOnce 只支援 asInvoker

     

    如果將

    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

    改回

    <requestedExecutionLevel level="asInvoker" uiAccess="false" />

    是就可以建置了

    但是

    對於HKEY_LOCALMACHINE 的讀寫 又是無法執行

     

    面對這兩難  可否再次提供解決的方向呢

     

    再次謝謝您的幫忙 感謝

     


     

     

    2008年6月12日 下午 01:54
  •  

    這個是一篇非常有幫助的文章  謝謝您的幫忙 ^-^

    不勝感激

    2008年6月18日 上午 12:17