是否可以检查当前已经与您自己运行的应用程序进程分开运行的.NET应用程序的强名称?
编辑:为了澄清,不需要执行程序集的硬编码路径的解决方案将是最理想的解决方案。
编辑#2:有没有办法没有使用反射?
答案 0 :(得分:5)
没有反思:
如果您知道该过程,则知道文件名。如果您知道文件名,可以process the PE headers to find the strong name signature。
答案 1 :(得分:2)
这能为您提供所需的信息吗?
Process[] processlist = Process.GetProcesses();
foreach(Process theprocess in processlist)
{
string strongName = "N/A";
try
{
strongName = Assembly.ReflectionOnlyLoadFrom(theprocess.MainModule.FileName).FullName;
}
catch
{
// System process?
}
Console.WriteLine("Process: {0} ID: {1} Strong Name: {2}", theprocess.ProcessName, theprocess.Id, strongName);
}
答案 2 :(得分:2)
这应该有效:
public static bool IsStrongNamed(string assemblyPath)
{
try
{
Assembly a = Assembly.ReflectionOnlyLoadFrom(assemblyPath);
byte[] publicKey = a.GetName().GetPublicKey();
return publicKey.Length > 0;
}
catch { return false; }
}
public static bool GetStrongName(string assemblyPath)
{
try
{
Assembly a = Assembly.ReflectionOnlyLoadFrom(assemblyPath);
return a.FullName;
}
catch { return string.Empty; }
}
答案 3 :(得分:0)
嗯,我认为你的问题的解决方案是AssemblyName类 第一
Process.GetProcesses().Where(p => p.ProcessName = nameUWant); //maybe single or default?
然后在每个进程中使用Process.Modules来获取此进程加载的dll或exes。 获得所需名称后。 (模块具有name属性)。 然后使用
AssemblyName.GetAssemblyName().GetPublicKeyToken() != null
这应该有效。 希望它有所帮助
答案 4 :(得分:-1)
如果“强名”是指exe名称:
using System.Diagnostics;
if (Process.GetProcessesByName("whatever.exe").Length > 0)
{
//do something
}