【问题标题】:Accessing properties between calls using NSIS CLR.dll使用 NSIS CLR.dll 在调用之间访问属性
【发布时间】: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 足够小,不会对性能造成太大影响。

【问题讨论】:

    标签: .net nsis


    【解决方案1】:

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

    【讨论】:

    • 那么有没有办法做我想做的事:调用一个改变.Net类状态的方法,然后通过属性访问改变的状态?
    • 您可能需要修改 CLR 插件。你试过问插件作者吗?
    • 要求昨天发生了变化,因此无法使用.Net,所以无论如何我都会用c ++编写解析器,可能相当于修改CLR插件。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 2017-01-23
    • 1970-01-01
    • 2012-12-07
    • 2021-06-20
    • 1970-01-01
    相关资源
    最近更新 更多