【发布时间】:2011-08-03 01:37:05
【问题描述】:
我正在使用 NSIS 编写一个需要解析 JSON 块的安装程序。
为了实现这一点,我希望能够调用一个解析 JSON 的 .Net dll,然后在我的 NSIS 脚本中我可以调用类的属性来检索我需要的数据。
但是,NSIS CLR.dll 似乎存在一个问题,即在调用之间没有维护类的状态。
我的测试.Net类如下:
namespace NSISTestDll
{
public class TestClass
{
private bool _configured;
public void Configure()
{
_configured = true;
}
public string Name
{
get
{
if (_configured)
{
return "John Doe";
}
return "Unconfigured";
}
}
}
}
我的 NSIS 脚本中调用它的部分是:
File "NSISTestDll.dll"
CLR::Call /NOUNLOAD "NSISTestDll.dll" "NSISTestDll.TestClass" "Configure" 0
CLR::Call /NOUNLOAD "NSISTestDll.dll" "NSISTestDll.TestClass" get_Name 0
pop $0
MessageBox MB_OK $0
MessageBox 显示“未配置”而不是预期的“John Doe”。
在 CLR.dll 上阅读论坛,插件的创建者确实提到这是一个问题。
有人知道解决方法吗?
我正在考虑做的一件事是用 C++ 编写一个包装器并改用 System.dll,这样我就可以将所需的值直接传递回 NSIS 脚本变量。
另一种方法是为我需要检索的每个属性解析 JSON,JSON 足够小,不会对性能造成太大影响。
【问题讨论】: