アプリケーションの起動時に、ユーザーが特定のバージョンのソフトウェア、特にMySQLコネクターがすべてc#を使用してインストールされているかどうかを確認しようとしています。レジストリには、MySQLにバージョンエントリが含まれています。私が達成しようとしているのはこれです。
アプリが起動します。起動コードのどこかで、次のことを順番に行う必要があります。次の場所にあるMySQLコネクタがユーザーにインストールされているかどうかを確認します。
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MySQL AB\MySQL Connector/Net
ユーザーがコネクタをインストールしている場合、Name = "Version"およびData = x.x.xとして保存されているバージョンを確認したかった(下図)
ユーザーに特定のバージョンがインストールされている場合、他のコードを実行します。ここから取得できます。
これについて最善の方法は何でしょうか?
編集:以下は現在持っているコードで、19行目でエラーが出ています(コメントされています)。私のエラーには「error CS1001: Identifier Expected
」と書かれていますが、それが何を意味するのか理解できませんでした。何か助け?
using System;
using Microsoft.Win32;
using System.Data;
public class regTest
{
public static void Main()
{
try
{
RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\\Wow6432Node\\MySQL AB\\MySQL Connector\\Net");
if (key != null)
{
Object o = key.GetValue("Version");
if (o != null)
{
Version version = new Version(o as String); //"as" because it's REG_SZ...otherwise ToString() might be safe(r)
Version broken = new Version("6.7.4");
if (version.Equals.(broken)) //This is where the error is occuring
{
DataSet dataSet = ConfigurationManager.GetSection("system.data") as ystem.Data.DataSet;
DataView vi = dataSet.Tables[0].DefaultView;
vi.Sort = "Name";
if (vi.Find("MySql") == -1)
{
dataSet.Tables[0].Rows.Add("MySql"
, "MySql.Data.MySqlClient"
, "MySql.Data.MySqlClient"
,
typeof(MySql.Data.MySqlClient.MySqlClientFactory).AssemblyQualifiedName);
}
}
}
}
}
catch (Exception ex) //just for demonstration...it's always best to handle specific exceptions
{
//react appropriately
}
}
}
最初にusing Microsoft.Win32;
をコードページに追加する必要があります。
その後、Registry
クラスの使用を開始できます。
try
{
using (RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\\Wow6432Node\\MySQL AB\\MySQL Connector\\Net"))
{
if (key != null)
{
Object o = key.GetValue("Version");
if (o != null)
{
Version version = new Version(o as String); //"as" because it's REG_SZ...otherwise ToString() might be safe(r)
//do what you like with version
}
}
}
}
catch (Exception ex) //just for demonstration...it's always best to handle specific exceptions
{
//react appropriately
}
BEWARE:管理者アクセス権がない限り、LOCAL_MACHINE
で多くのことを行うことはできません。値を読み取ることでさえ、管理者権限のない疑わしい操作になる場合があります。