我刚刚发现我可以在c#中编写我需要的功能,然后使其成为一个com库以在inno setup中调用它。以下是我正在玩的代码。如何在运行inno setup时注册在c#中创建的com类
C#代码:
namespace SetupUtility
{
[Guid("BC45B534-C9E7-4C43-B57C-56B77C1C6CEE")]
public interface IMyClass
{
void WriteToFile(string filepath, string name, string orgName, string emailID);
}
[Guid("9AB25B08-FF74-4ADA-9A16-62ADB4603A56"),
ClassInterface(ClassInterfaceType.None)]
public class MyClass:IMyClass
{
public void WriteToFile(string filepath,string name, string orgName, string emailID)
{
try
{
string[] strings = { name, orgName, emailID };
File.WriteAllLines(filepath + "userDetails.txt", strings);
MessageBox.Show("File Written Successfully");
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.ToString());
}
}
}
}
而下面是从Pascal脚本我设法与大力气写的摘录:
ExtractTemporaryFile('SetupUtility.dll');
Exec('{dotnet40}\regasm.exe','{tmp}\SetupUtility.dll', '', SW_SHOW,
ewWaitUntilTerminated, ResultCode);
obj := CreateOleObject('SetupUtility.MyClass');
obj.WriteToFile('{tmp}',ContactPerson, OrgName, Email);
的代码编译罚款,但当我运行安装程序时,我收到消息“类未注册”。错误来自哪里以及可能的出路是什么?
您是否确认可以通过其编译机器上的COM客户端创建这些类?您可能还需要'/ codebase'参数。 – Deanna 2013-03-18 10:37:49
什么都没有跳出来,一个位的问题并不能解释它。使用SysInternals的ProcMon实用工具找出缺少什么注册表项。并确保你有一个regasm.exe实际执行的最低保证。 – 2013-03-18 13:13:40