我创建了一个installshield项目。我已经使用“在托管程序集中调用公共方法”创建了一个自定义操作。 DLL中的代码是
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;
namespace ClassLibrary1
{
public class Class1
{
public string MyFunc(int flag)
{
System.Management.ManagementClass mangnmt = new ManagementClass("Win32_LogicalDisk");
ManagementObjectCollection mcol = mangnmt.GetInstances();
string result = "";
foreach (ManagementObject strt in mcol)
{
if (Convert.ToInt32(strt["MediaType"]) != 12) { continue; }
if (Convert.ToInt32(strt["DriveType"]) != 3) { continue; }
if (Convert.ToString(strt["Name"]).ToLower() != "c:") { continue; }
result += "VolumeSerialNumber : " + Convert.ToString(strt["VolumeSerialNumber"]) + Environment.NewLine;
result = Convert.ToString(strt["VolumeSerialNumber"]);
if (!String.IsNullOrEmpty(result)) break;
}
return result;
}
}
}
每当installshield尝试调用此方法MyFunc时,它都无法找到依赖关系System.managment.dll并且崩溃了。我验证设置因此问题而崩溃,就好像我评论使用system.managment.dll的代码并简单地返回硬编码字符串一样正常。
在installshield中,我还将System.Management.dll添加为在ISClrwap表中创建的自定义操作的依赖项。我还添加了我已经下载的.Net Framework 4.0的installshield先决条件。
我搜索了很多表格,但无法找出解决这个问题的方法。