1.首先检查C:\WINDOWS\system32文件夹中是否缺少msi.dll这个文件,如果没有的话就去别的机器上拷贝一个过来,或者去下载一个windowsinstaller安装包,解压msi.dll出来复制到C:\WINDOWS\system32文件夹中;
2. 单击“开始”,单击“运行”,键入 MSIEXEC /UNREGISTER,然后单击“确定”。这时系统可能不会有任何反应,即使 *** 作完全正确;
3. 单击“开始”,单击“运行”,键入 MSIEXEC /REGSERVER,然后单击“确定”。这时系统可能不会有任何反应(即使您的 *** 作完全正确),也可能会暂时出现一个沙漏。运行此命令后,也就完成了 *** 作;
4. 再次尝试安装基于 Windows Installer 的应用程序 ,现在应该可以正常启动windows installer服务了。
安装Winfows服务首先要添加安装程序,添加安装程序步骤如下:
1、将Windows服务程序切换到设计视图, 右击设计视图选择“添加安装程序”
2、切换到刚被添加的ProjectInstaller的设计视图
一般设置如下:
设置serviceInstaller1组件的属性:
1) ServiceName = 服务名称
2) StartType = Automatic ,即自动
设置serviceProcessInstaller1组件的属性
1) Account = LocalSystem,账户一般设置为本地系统
3、生成解决方案
安装服务:
方法一、使用DOS命令安装window服务
1、在服务所在的文件夹下的bin\debug文件夹下找到.exe文件(例如WindowsService1.exe)
将此文件拷贝到你想安装的文件夹中。
2、进入DOS界面
(VS2008-->Visual Studio Tools-->Visual Studio 2008 命令提示)来进入DOS,直接用cmd可能有些命令找不到;
3、输入
方法二、使用安装项目安装windows服务
个人比较推荐这个方法,选择目录安装更灵活,而且不用在DOS环境下运行。
因为本人比较懒,直接给出别人总结的地址
注意,以后每次服务项目有更改的时候,需要编译服务后,在安装项目中刷新依赖项!!!
方法三、
在ProjectInstaller.cs的后台代码中添加安装服务和卸载服务的代码
/// <summary>
/// 安装服务
/// </summary>
/// <param name="stateSaver"></param>
public override void Install(System.Collections.IDictionary stateSaver)
{
Microsoft.Win32.RegistryKey system,
//HKEY_LOCAL_MACHINE\Services\CurrentControlSet
currentControlSet,
//...\Services
services,
//...\<Service Name>
service,
//...\Parameters - this is where you can put service-specific configuration
config
try
{
//Let the project installer do its job
base.Install(stateSaver)
//Open the HKEY_LOCAL_MACHINE\SYSTEM key
system = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("System")
//Open CurrentControlSet
currentControlSet = system.OpenSubKey("CurrentControlSet")
//Go to the services key
services = currentControlSet.OpenSubKey("Services")
//Open the key for your service, and allow writing
service = services.OpenSubKey(conServiceName, true)
//Add your service's description as a REG_SZ value named "Description"
service.SetValue("Description", "描述语言")
//(Optional) Add some custom information your service will use...
config = service.CreateSubKey("Parameters")
}
catch (Exception e)
{
Console.WriteLine("An exception was thrown during service installation:\n" + e.ToString())
}
}
/// <summary>
/// 卸载服务
/// </summary>
/// <param name="savedState"></param>
public override void Uninstall(System.Collections.IDictionary savedState)
{
Microsoft.Win32.RegistryKey system,
currentControlSet,
services,
service
try
{
//Drill down to the service key and open it with write permission
system = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("System")
currentControlSet = system.OpenSubKey("CurrentControlSet")
services = currentControlSet.OpenSubKey("Services")
service = services.OpenSubKey(conServiceName, true)
//Delete any keys you created during installation (or that your service created)
service.DeleteSubKeyTree("Parameters")
//...
}
catch (Exception e)
{
Console.WriteLine("Exception encountered while uninstalling service:\n" + e.ToString())
}
finally
{
//Let the project installer do its job
base.Uninstall(savedState)
}
}
代码添加完成后
添加window service安装的批处理命令
1)在项目添加一个文本文件,更名为install.bat,编辑文件的内容如下:
@echo off
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe -i "WindowsService1.exe"
@pause
2)在项目添加一个文本文件,更名为uninstall.bat,编辑文件的内容如下
@echo off
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe -u "WindowsService1.exe"
@pause
说明:上面绿色字体为服务名称
编译完成后将debug的文件拷贝到想安装的目录下,点击install.bat即完成安装。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)