我有一个.Net Windows服务.我想创建一个安装程序来安装该Windows服务.
基本上,它必须执行以下操作:
installutil.exe(需要吗?)installutil.exeMyService.exe另外,我想提供一个运行以下命令的卸载程序:
installutil.exe /u MyService.exe
Run Code Online (Sandbox Code Playgroud)
如何使用Inno Setup进行这些操作?
我编写了一个Windows服务,它将WCF服务公开给安装在同一台机器上的GUI.当我运行GUI时,如果我无法连接到该服务,我需要知道是否因为尚未安装服务应用程序,或者是因为服务未运行.如果是前者,我将要安装它(如描述这里); 如果是后者,我会想要启动它.
问题是:如何检测服务是否已安装,然后检测到它已安装,如何启动?
是否可以使用ClickOnce部署Windows服务?如果是这样,你是如何实现这一目标的?
目前,我们必须使用Deployment项目,使用ClickOnce可以大大简化安装过程.
我需要使用InstallUtil来安装C#windows服务.我需要设置服务登录凭据(用户名和密码).所有这一切都需要默默地完成.
有没有办法做这样的事情:
installutil.exe myservice.exe /customarg1=username /customarg2=password
Run Code Online (Sandbox Code Playgroud) 我正在尝试部署Windows服务但不太确定如何正确执行.我将它构建为控制台应用程序,我现在将其转换为Windows服务项目,并从服务中的OnStart方法调用我的类.
我现在需要在没有Visual Studio的服务器上安装它,如果我正确理解它意味着我不能使用InstallUtil.exe而必须创建一个安装程序类.它是否正确?
我确实看过上一个问题,安装没有InstallUtil.exe的.NET Windows服务,但我只是想确保我已经正确理解它.
如果我创建了问题的接受答案链接到的类,下一步是什么?将MyService.exe和MyService.exe.config上传到服务器,双击exe文件,Bob是我的叔叔?
该服务只能安装在一台服务器上.
在将流程或可执行文件作为服务运行时是否有任何事情需要处理.如静默日志记录.关键错误报告方案?等等?你怎么处理它?
我有一个用C#编写的Windows服务,它充当后端数据库的一堆网络设备的代理.为了测试并添加模拟层来测试后端,我希望有一个GUI供测试操作员运行模拟.还可以将条带化版本作为演示发送出去.GUI和服务不必同时运行.实现这种决斗操作的最佳方法是什么?
编辑:这是我的解决方案,从梳理的东西这个问题,我正在运行的服务和安装.NET Windows服务不InstallUtil.exe使用这个优秀的代码 由马克Gravell
它使用以下行来测试是运行gui还是作为服务运行.
if (arg_gui || Environment.UserInteractive || Debugger.IsAttached)
Run Code Online (Sandbox Code Playgroud)
这是代码.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.ComponentModel;
using System.ServiceProcess;
using System.Configuration.Install;
using System.Diagnostics;
namespace Form_Service
{
static class Program
{
///
/// The main entry point for the application.
///
[STAThread]
static int Main(string[] args)
{
bool arg_install = false;
bool arg_uninstall = false;
bool arg_gui = false;
bool rethrow = false;
try
{
foreach …Run Code Online (Sandbox Code Playgroud) 我刚刚创建了一个简单的.NET Windows服务.我的用户应该从我的网站下载并安装在他们的计算机上.所以,从各种论坛帖子(包括这个网站)我知道为了做到这一点,我需要一个安装程序.或者我可以给他们服务文件并指导如何安装它.我开始创建一个安装项目,并能够编译我自己的.msi安装程序.但有一位用户抱怨他现在无法卸载它.我对它进行了研究,发现.msi格式存在一些问题,主要与它在GAC中计算引用的方式有关.不过,很容易帮他修理电脑.从我与用户的对话中我知道,训练他们使用sc.exe或installutil.exe几乎是不可能的.我还在http://installer.codeeffects.com上找到了一个服务,它可以在没有任何代码的情况下为我的服务构建安装程序,但我不确定我的安装程序是否应该是msi或exe.所以,显然我在这里完全混乱:)请帮助伙计们,任何一般或详细的建议将受到高度赞赏.
@Marc Gravell给出了如何在这里安装Windows服务的一个很好的例子.我去实施它,一切都很好.
然后我重新启动了我的电脑......突然间,当我尝试安装时,我开始获得安全异常!我得到一个SecurityException:"不允许请求注册表访问".我想也许麻烦从重新启动开始,所以就像在头部的第二次打击治疗健忘症的漫画中,我尝试重新启动...但事实证明生活不像卡通...... :(
好的,所以我用Google搜索了问题,并找到了建议,将注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog的权限授予我的网络服务.这也行不通.我赋予每个人完全的权利 - 而且是HURRAY!我现在得到一个不同的例外! InvalidOperationException:"无法在计算机上打开服务控制管理器.".此操作可能需要其他权限.(内部异常是Win32Exception:"访问被拒绝".)嗯,对不起?我正在尝试在本地计算机上安装!什么是"电脑".""那边做什么?
这非常令人沮丧,因为正如我所说,昨天它工作正常,今天一切都崩溃了,代码库没有任何明显的变化.
这是我安装的代码(复制并改编自Marc Gravell的样本):
using (var inst = new AssemblyInstaller(typeof(MyNamespace.Program).Assembly, new string[] { })) {
IDictionary state = new Hashtable();
inst.UseNewContext = true;
try {
if (uninstall) {
inst.Uninstall(state);
} else {
inst.Install(state);
inst.Commit(state);
}
} catch {
try {
inst.Rollback(state);
} catch { }
throw;
}
}
Run Code Online (Sandbox Code Playgroud)
安装程序代码是:
[RunInstaller(true)]
public sealed class MyServiceInstallerProcess : ServiceProcessInstaller {
public MyServiceInstallerProcess() {
this.Account = ServiceAccount.NetworkService;
}
}
[RunInstaller(true)] …Run Code Online (Sandbox Code Playgroud) c# ×7
.net ×3
installer ×3
clickonce ×1
deployment ×1
inno-setup ×1
install ×1
service ×1
wcf ×1
winforms ×1