MsiInstallProduct выдает исключение NullReferenceException на окно 2016 - PullRequest
0 голосов
/ 28 ноября 2018

Я получаю странную ошибку:

ERROR:System.NullReferenceException: Object reference not set to an instance of an object.
   at WindowsInstaller.MsiInterop.MsiInstallProduct(String product, String commandLine)
   at msicontroller.Program.Main(String[] arg

объявление:

[DllImport(MSI_LIB, CharSet = CharSet.Auto,  SetLastError=true)]
    extern static public MsiError   MsiInstallProduct(string product, string commandLine);

Я получаю эту ошибку только на 1 ПК, ПК является win server 2016

1 Ответ

0 голосов
/ 29 ноября 2018

ОБНОВЛЕНИЕ (для сообщества): если вы настаиваете на прямом вызове платформы, вы все равно можете воспользоваться DTF, упомянутым ниже, поскольку исходный код DTFдоступно на github.com .Вы можете увидеть, как платформа вызывает / COM-взаимодействия.


DTF : было бы проще использовать DTF (Deployment Tools Foundation) за это.Это компонент / набор сборок, который теперь является частью инструментария WiX , и он заботится обо всех вызовах платформы, поэтому вы можете использовать MSI API как обычный управляемыйAPI (около).Другими словами DTF is essentially a .NET wrapper for the Win32 Windows Installer API.

Образец DTF ( из этого ответа, раздел 6 ):

using Microsoft.Deployment.WindowsInstaller;

public static void Uninstall( string productCode)
{
  Installer.ConfigureProduct(productCode, 0, InstallState.Absent, "REBOOT=\"R\"");
}

Процедура : загрузите набор инструментов WiX, установите и добавьте ссылку в свой проект Visual Studio в Microsoft.Deployment.WindowsInstaller.dll файл и разверните его вместе с другими файлами релиза.Или, если это для настраиваемого действия установщика Windows: включите в проект настраиваемого действия.Шаблоны в WiX доступны для этого после установки интеграции с Visual Studio - отдельная загрузка по той же ссылке выше.По сути, это должно происходить автоматически при сборке, я думаю.Дело в том, что управляемая DLL (сборка) преобразуется во время сборки в собственную DLL-оболочку, которая содержит файлы, необходимые для запуска настраиваемого действия.


Некоторые дополнительные ссылки :

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...