Я пишу установщик, использующий NSIS, который должен проанализировать блок JSON.
Чтобы добиться этого, я надеялся, что смогу вызвать dll .Net, которая будет анализировать JSON, а затем в моем скрипте 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
В блоке сообщений отображается «неконфигурированный», а не ожидаемый «Джон Доу».
Читая форум на CLR.dll, создатель плагина упоминает, что это проблема.
Кто-нибудь знает обходной путь для этого?
Одна вещь, о которой я думал, это написать оболочку на C ++ и использовать вместо нее System.dll, чтобы я мог передать нужные значения обратно непосредственно в переменные сценария NSIS.
Другой альтернативой является анализ JSON для каждого свойства, которое мне нужно получить, JSON достаточно мал, чтобы это не слишком сильно сказывалось на производительности.