Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio windows服务的生成前/生成后事件。最佳做法_Visual Studio_Windows Services_Pre Build Event_Prebuild_Build Events - Fatal编程技术网

Visual studio windows服务的生成前/生成后事件。最佳做法

Visual studio windows服务的生成前/生成后事件。最佳做法,visual-studio,windows-services,pre-build-event,prebuild,build-events,Visual Studio,Windows Services,Pre Build Event,Prebuild,Build Events,已获取windows服务,需要使用project build重新创建该服务 在活动前: sc查询“服务”|查找正在运行的DSTR/i |如果“%errorlevel%”=0(sc 停止“服务”) sc查询“服务”|查找正在运行的DSTR/i |如果“%errorlevel%”=0(sc 删除“服务”) 事件后: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe $(目标路径) 净启动“服务” 但我有这样的问题 命令错误

已获取windows服务,需要使用project build重新创建该服务

在活动前:

sc查询“服务”|查找正在运行的DSTR/i |如果“%errorlevel%”=0(sc 停止“服务”)

sc查询“服务”|查找正在运行的DSTR/i |如果“%errorlevel%”=0(sc 删除“服务”)

事件后:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe $(目标路径)

净启动“服务”

但我有这样的问题

命令错误1 “C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe D:…\bin\Debug\Host.exe

网络启动“服务”已退出,代码为2。主人


有什么帮助吗?

请不要忘记,构建事件中的脚本实际上只不过是shell脚本,因此如果不使用[双]引号,路径(或程序集等)中的空格将使其出错

我要做的是在shell中使用宏${TargetPath}等,输入与展开命令完全相同的命令,首先确保它是正确的。在那里,你将看到空间问题是否让你陷入困境

我同意VS接口没有给出很多具体的反馈,但公平地说,它实际上只是分岔到一个shell,并显示shell在处理完所有行后返回的内容

因此,在一行上抛出一个errorlevel('exit code'到VS),最后抛出一个摘要错误级别a

下面是我放在项目根目录中的两个批处理文件,“如果更新,请复制”到输出目录,并在命令行上运行:

.\startDeploy.bat

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe SomeService.exe
net start "Some Server"
……还有

.\stopDeploy.bat

net stop "Some Server"
    C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /LogToConsole=true /u SomeService.exe

如果你有更好的方法(我喜欢你使用sc),那么只需冲洗,起泡,重复。当您确定一切正常时,请将其转换为“生成事件”窗口。在准备部署之前,我不会这样做。

不要忘记,构建事件中的脚本实际上只不过是shell脚本,因此如果不使用双引号括起来,路径(或程序集等)中的空格将把事情搞砸

我要做的是在shell中使用宏${TargetPath}等,输入与展开命令完全相同的命令,首先确保它是正确的。在那里,你将看到空间问题是否让你陷入困境

我同意VS接口没有给出很多具体的反馈,但公平地说,它实际上只是分岔到一个shell,并显示shell在处理完所有行后返回的内容

因此,在一行上抛出一个errorlevel('exit code'到VS),最后抛出一个摘要错误级别a

下面是我放在项目根目录中的两个批处理文件,“如果更新,请复制”到输出目录,并在命令行上运行:

.\startDeploy.bat

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe SomeService.exe
net start "Some Server"
……还有

.\stopDeploy.bat

net stop "Some Server"
    C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /LogToConsole=true /u SomeService.exe
如果你有更好的方法(我喜欢你使用sc),那么只需冲洗,起泡,重复。当您确定一切正常时,请将其转换为“生成事件”窗口。在准备部署之前,我不会执行此操作。

这对我很有用

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe" /u $(TargetFileName)
"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe" $(TargetFileName)
 net start "Replace With Service Name"
我将这些命令放在生成事件的生成后部分

第一行将卸载服务的一个预先存在的实例。如果服务不存在,则不会失败,因此无需首先查询服务。您也不需要停止服务,卸载将自动完成

第二行将安装/重新安装您的服务

第三条线路将启动服务。 确保将其更改为不带任何文件扩展名的服务名称

希望这对我有帮助。

这对我有用

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe" /u $(TargetFileName)
"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe" $(TargetFileName)
 net start "Replace With Service Name"
我将这些命令放在生成事件的生成后部分

第一行将卸载服务的一个预先存在的实例。如果服务不存在,则不会失败,因此无需首先查询服务。您也不需要停止服务,卸载将自动完成

第二行将安装/重新安装您的服务

第三条线路将启动服务。 确保将其更改为不带任何文件扩展名的服务名称


希望这能有所帮助。

我也面临着同样的问题。在我的例子中,当服务已经处于停止状态时,您尝试使用
sc stop“service”
命令停止windows服务时,就会发生这种情况

如果在执行命令时出错,那么命令shell将返回非零值(主要是1或整数错误代码),作为返回代码,Visual Studio将根据该返回代码停止进一步的生成过程

因为服务已经处于停止状态,所以我们希望VisualStudio忽略返回代码。您可以通过下面提到的任何一种方式实现它。只需将其附加到预构建事件代码的末尾:

SET ERRORLEVEL = 0

即使在服务已处于停止状态时出现任何错误,也会强制返回0(成功)代码。因此,我的完整预构建事件代码如下所示:

IF "Debug" == "$(ConfigurationName)" ( 
   sc query "W3SVC" | findstr "RUNNING" &  if %errorlevel% == 0 (net stop "World Wide Web Publishing Service")
   EXIT 0

我的意图是仅在调试构建时停止IIS服务。

我也面临着同样的问题。在我的例子中,当服务已经处于停止状态时,您尝试使用
sc stop“service”
命令停止windows服务时,就会发生这种情况

如果在执行命令时出错,那么命令shell将返回非零值(主要是1或整数错误代码),作为返回代码,Visual Studio将根据该返回代码停止进一步的生成过程

因为服务已经处于停止状态,所以我们希望VisualStudio忽略返回代码。您可以通过下面提到的任何一种方式实现它。只需将其附加到预构建事件代码的末尾:

SET ERRORLEVEL = 0

即使在服务已处于停止状态时出现任何错误,也会强制返回0(成功)代码。因此,我的完整预构建事件代码如下所示:

IF "Debug" == "$(ConfigurationName)" ( 
   sc query "W3SVC" | findstr "RUNNING" &  if %errorlevel% == 0 (net stop "World Wide Web Publishing Service")
   EXIT 0

我的意图是仅在调试构建时停止IIS服务。

在这种情况下,将errorlevel设置为0是一种给我的灵魂带来纯粹快乐的解决方案。很好的解决方案!将errorlevel设置为0