0

重複の可能性:
dll が登録されているかどうかを確認するには?

ローカル マシンに SlimDX.dll がインストールされているかどうかを確認する必要があります。インストール dll のリストを取得するにはどうすればよいですか? dll のパスは -> C:\Windows\Microsoft.NET\assembly\GAC_32 です。

string  path="";
rk = Registry.LocalMachine.OpenSubKey("");
 string[] keys = rk.GetSubKeyNames();
foreach (string keyName in keys)
 {
       RegistryKey subKey = rk.OpenSubKey(keyName);
 }

これは正しい方法ですか?

4

2 に答える 2

1

次のコードを使用して、GACで使用可能なdllのリストを取得できます。詳細については、 http://www.developerfusion.com/thread/42116/getting-list-of-assemblies-in-gac/をご覧ください。

string strGacDir = @"C:\Windows\Microsoft.NET\assembly\GAC_32";
string[] strDirs1 = System.IO.Directory.GetDirectories(strGacDir);
string[] strDirs2;

string[] strFiles;

foreach (string strDir1 in strDirs1)
{
    strDirs2 = System.IO.Directory.GetDirectories(strDir1);

    foreach (string strDir2 in strDirs2)
    {
        strFiles = System.IO.Directory.GetFiles(strDir2, "SlimDX.dll");
        foreach (string strFile in strFiles)
        {
            return true;
        }
    }
}     
于 2012-05-31T03:49:10.697 に答える
1

あなたはここを見ることができます:

アセンブリがC#を使用してGACにロードされているかどうかをプログラムで確認してください

リンクが悪くなった場合:

public static bool AssemblyExist(string assemblyname, out string response)
{
    try
    {
        response = QueryAssemblyInfo(assemblyname);
        return true;
    }
    catch (System.IO.FileNotFoundException e)
    {
        response = e.Message;
        return false;
    }
}

// If assemblyName is not fully qualified, a random matching may be 
public static String QueryAssemblyInfo(string assemblyName)
{
    var assembyInfo = new AssemblyInfo {cchBuf = 512};
    assembyInfo.currentAssemblyPath = new String('', assembyInfo.cchBuf);

    IAssemblyCache assemblyCache;

    // Get IAssemblyCache pointer
    var hr = GacApi.CreateAssemblyCache(out assemblyCache, 0);
    if (hr == IntPtr.Zero)
    {
        hr = assemblyCache.QueryAssemblyInfo(1, assemblyName, ref assembyInfo);
        if (hr != IntPtr.Zero)
        {
            Marshal.ThrowExceptionForHR(hr.ToInt32());
        }
    }
    else
    {
        Marshal.ThrowExceptionForHR(hr.ToInt32());
    }
    return assembyInfo.currentAssemblyPath;
}
于 2012-05-30T09:22:34.453 に答える