2017-10-20 12 views
1

レジストリエントリを読み取るカスタムアクションがあります。既にsession["UtillRegKey"]がレジストリに登録されている場合は、printerIndexが増えます。 問題は既にレジストリがあり、prnKeyは常にnullになります。私はレジストリを読むために必要な権限はないと思うが、設定した後でさえも結果は同じだった。そして、私はWindowsフォームアプリケーションを作成し、そこに同じ関数を追加して、期待どおりに動作します。カスタムアクションがレジストリキーにアクセスできません

誰でもこのprnKey = prnKey.OpenSubKey(registryPath, false);がWIXカスタムアクションでnullを返す理由を説明できますか?どうすればこの問題を克服できますか?

[CustomAction] 
public static ActionResult RegistryDetails(Session session) 
{ 
    try 
    { 
     string registryPath = session["UtillRegKey"]; 
     int printerIndex = 1; 
     RegistryKey prnKey = Registry.LocalMachine; 
     prnKey = prnKey.OpenSubKey(registryPath, false); 

     if (null != prnKey) 
     { 
      global::System.Windows.Forms.MessageBox.Show("Not NUll"); 
      List<string> subKeyList = new List<string>(); 
      subKeyList.AddRange(prnKey.GetSubKeyNames()); 

      while (subKeyList.Contains(printerIndex.ToString())) 
      { 
       printerIndex++; 
      } 
     } 

     string newRegistryPath = registryPath + "\\" + printerIndex.ToString(); 
     session["UtillRegKey"] = newRegistryPath; 
     session["PrinterNo"] = printerIndex.ToString(); 
    } 
    catch (Exception ex) 
    { 

     CurrentSession.Log(ex.Message); 
     Record exceptionRec = new Record(0); 
     exceptionRec[0] = "Errors -" + ex.StackTrace.ToString(); 
     CurrentSession.Message(InstallMessage.Error, exceptionRec); 

     return ActionResult.Failure; 
    } 
    return ActionResult.Success; 
} 

答えて

1

それは、permisionの問題ではありません、それはする必要があること、キーが利用できない場合は、そうしてprnKey = nullキーがない場合。 x86でビルドすることを意識してx64で実行すると、いくつかの問題が発生する可能性があります。パスは同じではないためです。正しい設定のためにビルドするか、明示的にオープンしてください

RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64) 
関連する問題