2013-11-01 87 views
0

我的問題是,當我使用Registry.SetValue時,我只希望它更新現有值。如果輸入的值名稱不存在,我不想創建它。我有用戶輸入的可變數據,所以我無法在我的代碼中硬編碼路徑。c#僅在註冊表值名稱已存在的情況下設置新的註冊表值

我爲我設置

public class SetRegistryValue : CodeActivity 
{ 
    [RequiredArgument] 
    public InArgument<string> kpath { get; set; } 

    public InArgument<string> txtName { get; set; } 

    [RequiredArgument] 
    public InArgument<string> kvaluename { get; set; } 

    [RequiredArgument] 
    public InArgument<string> kvalue { get; set; } 

    //This will set the value of an key that is defined by user 
    protected override void Execute(CodeActivityContext context) 
    { 

     string KeyPath = this.kpath.Get(context); 
     string KeyValueName = this.kvaluename.Get(context); 
     string KeyValue = this.kvalue.Get(context); 
     string KeyName = Path.GetDirectoryName(KeyPath); 
     string KeyFileName = Path.GetFileName(KeyPath); 
     string fullKeyPath = KeyName + "\\" + KeyFileName; 

     Registry.SetValue(fullKeyPath, KeyValueName, KeyValue, RegistryValueKind.String); 
    } 
} 
+0

當然,我們會幫助你,請你清楚說明你想要的。如果可能,請提供一些例子。 –

+0

@sudhakar像授予說bellow我想獲得價值的名稱值。我想查看註冊表中的值名稱,如果它在那裏將值更改爲活動中提供的任何新值。但是,如果值名稱不在路徑中,請不要執行setvalue。 – Brandon

回答

2

使用Registry.GetValue()方法代碼:

檢索與指定名稱關聯的值,在指定的註冊表項。如果在指定的鍵中找不到名稱,則返回您提供的默認值;如果指定的鍵不存在,則返回null。

如果你想測試keyName是否存在,爲空測試:

var myValue 
    = Registry.GetValue(@"HKEY_CURRENT_USER\missing_key", "missing_value", "hi"); 

// myValue = null (because that's just what GetValue returns) 

如果你想測試valueName是否存在,測試您的默認值:

var myValue 
    = Registry.GetValue(@"HKEY_CURRENT_USER\valid_key", "missing_value", null); 

// myValue = null (because that's what you specified as the defaultValue) 

如果路徑可能無效,可以嘗試用try/catch塊嘗試包圍它:

try 
{ 
    var myValue = Registry.GetValue(...); // throws exception on invalid keyName 

    if (myValue != null) 
     Registry.SetValue(...); 
} 
catch (ArgumentException ex) 
{ 
    // do something like tell user that path is invalid 
} 
+0

思考是我最初想要使用的,但是我無法在代碼中控制getvalue的路徑,這是我錯誤出現的時候。你可以從上面的代碼中看到我的設置活動。我的獲得活動看起來很相似,但顯然是獲得活動。 – Brandon

+0

@Brandon:看看我的編輯是否有效,如果我正確理解你的話。 –

+0

看起來像這樣做。星期一將進行全面測試,但如果你不在我身後,它就會奏效。看起來像會,我嘗試了類似的東西,但沒有聲明爲var ...是我的錯誤。附:從克利夫蘭注意到你也...去了BROWNS – Brandon