Я пишу dll, который должен содержать '.exe' (приложение службы Windows) в качестве встроенного ресурса, следуя указаниям по этой ссылке Встраивание внешнего исполняемого файла в программу на C # .Я могу извлечь .exe в виде байтового массива и скопировать его в каталог назначения.Все хорошо до этого момента.
После этого я попытался программно установить эту службу Windows из моей библиотеки, используя то, что указано здесь - не удалось, затем попытался вручную выполнить installutil после извлечения exe - снова не удалосьа затем снова прибегнул к программным средствам и попытался ManagedInstallerClass.InstallHelper(new string[] { "/u", <Path_To_My_Exe> });
и снова потерпел неудачу.Во всех этих случаях я получил классический
. Не найдено общедоступных установщиков с атрибутом RunInstallerAttribute.Yes
, связанных с отсутствием установщика для приложения-службы Windows.
Классу установщика также присвоено значение RunInstallerAttribute, равное True.
using System.Collections;
using System.ComponentModel;
using System.Configuration.Install;
namespace Dell.Client.Framework.AutoUpdateBootstrapper
{
[RunInstaller(true)] //This attribute is true.
public partial class ProjectInstaller : Installer
{
public ProjectInstaller()
{
InitializeComponent();
}
protected override void OnAfterInstall(IDictionary savedState)
{
base.OnAfterInstall(savedState);
using (System.ServiceProcess.ServiceController serviceController = new System.ServiceProcess.ServiceController(serviceInstaller1.ServiceName))
{
serviceController.Start();
}
}
}
}
Еще одним ключевым выводом было, если я просто попытался установить этот exe-файл (который является частью решения с несколькими проектами)не прибегая к встраиванию и извлечению, я смог успешно установить сервис.Я не могу сказать, можем ли мы использовать альтернативный подход.К сожалению, я должен придерживаться метода встраивания и извлечения, если невозможно установить его таким способом.