使用NSIS CLR.dll访问调用之间的属性

时间:2011-04-11 13:06:07

标签: .net nsis

我正在使用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显示“Unconfigured”而不是预期的“John Doe”。

在CLR.dll上阅读论坛,插件的创建者确实提到这是一个问题。

有没有人知道这方面的解决方法?

我想做的一件事是在C ++中编写一个包装器并使用System.dll,这样我就可以将我需要的值直接传递回NSIS脚本变量。

另一种选择是为我需要检索的每个属性解析JSON,JSON足够小,不会对性能造成太大影响。

1 个答案:

答案 0 :(得分:2)

在像CLR::Call /NOUNLOAD ... / NOUNLOAD这样的调用中只适用于CLR dll(插件)如果需要保持NSISTestDll加载,CLR插件本身必须发明/支持它自己的参数