Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/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
C# 4.0 如何从C#(桌面应用程序)安装Windows服务_C# 4.0_Windows Services_Installation - Fatal编程技术网

C# 4.0 如何从C#(桌面应用程序)安装Windows服务

C# 4.0 如何从C#(桌面应用程序)安装Windows服务,c#-4.0,windows-services,installation,C# 4.0,Windows Services,Installation,我有一个名为MyCustomUpdater.exe的程序,可以下载windows服务zip文件并将其解压缩 提取文件夹中包含MyWindowsServices.exe文件 我想从MyCustomUpdater.exe安装这些MyWindowsServices.exe 我使用下面提到的代码 Process process = new Process(); process.StartInfo.FileName = "cmd.exe"; process.StartInfo.WindowStyle =

我有一个名为MyCustomUpdater.exe的程序,可以下载windows服务zip文件并将其解压缩

提取文件夹中包含MyWindowsServices.exe文件

我想从MyCustomUpdater.exe安装这些MyWindowsServices.exe

我使用下面提到的代码

Process process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.Verb = "runas";
process.Start();

if (process != null)
{
     process.StandardInput.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.Windows) + "\\Microsoft.NET\\Framework\\v4.0.30319\\installutil.exe /u \"" + "E:\Testing\MV.AutoUpdateWindowsService.exe" + "\"");
     process.StandardInput.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.Windows) + "\\Microsoft.NET\\Framework\\v4.0.30319\\installutil.exe \"" + "E:\Testing\MV.AutoUpdateWindowsService.exe" + "\"");
     process.StandardInput.Close();
}
process.Close();
但它不会安装windows服务

此代码只需打开一个空白的黑色命令提示窗口;没有进一步的执行

我还尝试在中运行windows服务安装命令

process.StartInfo.Arguments
我在visual studio 2013中使用了dot net framework 4.5


我为MyCustomUpdater.exe添加app.manifest文件 包括app.manifest后,我设置了它。 右键单击程序>属性>应用程序>资源>清单[单击下拉列表] 然后选择应用程序清单 在那之后,我有了机会密码

Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.Windows) + @"\Microsoft.NET\Framework\v4.0.30319\installutil.exe", _FilePath);
这个很好用 但是,对于卸载过程

Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.Windows) + @"\Microsoft.NET\Framework\v4.0.30319\installutil.exe", "/u " + _FilePath);

不起作用

下面是app.manifest文件的代码

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
      <applicationRequestMinimum>
        <PermissionSet Unrestricted="true" ID="Custom" SameSite="site" />
        <defaultAssemblyRequest permissionSetReference="Custom" />
      </applicationRequestMinimum>
    </security>
  </trustInfo>
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
    </application>
  </compatibility>
</asmv1:assembly>

帮帮我


谢谢

当您可以直接执行安装可执行文件时,以这种方式使用
cmd.exe
似乎有点不寻常。但是如果您真的想使用
cmd.exe
和STDIN重定向。然后需要通过“/K”开关使用交互模式


有关详细信息,请参见此。

您应该以管理员身份运行试图调用
installutil.exe
的程序,然后直接运行
installutil.exe
,而不需要
cmd
的帮助。此外,我发现PInvoke更稳定(请参阅,)。

完成了

在app.manifest的帮助下,程序以管理员模式运行。 [代码如上所述]

下面是在“静默”模式下安装windows服务的代码


谢谢大家。

嗨。您希望使用标准输入将exe传递到
cmd.exe
,而不是直接执行installutil.exe(即在
StartInfo.FileName
)有什么原因吗?我添加了
process.OutputDataReceived+=(s,e)=>\u ILog.Fatal(@“OutputDataReceived:+e.Data”)也可以,但无法获得输出它失败了吗?在
InstallUtil.InstallLog
文件中是否有任何线索?我添加app.manifest以在管理模式下运行我的应用程序。然后进行
过程。开始安装。
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
      <applicationRequestMinimum>
        <PermissionSet Unrestricted="true" ID="Custom" SameSite="site" />
        <defaultAssemblyRequest permissionSetReference="Custom" />
      </applicationRequestMinimum>
    </security>
  </trustInfo>
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
    </application>
  </compatibility>
</asmv1:assembly>
Process _Process = new Process();
_Process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
_Process.StartInfo.FileName = Environment.GetFolderPath(Environment.SpecialFolder.Windows) + @"\Microsoft.NET\Framework\v4.0.30319\installutil.exe";
_Process.StartInfo.Arguments = "/u \"" + _FilePath + "\"";
_Process.Start();
System.Threading.Thread.Sleep(8000);
_Process.Close();
_Process = new Process();
_Process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
_Process.StartInfo.FileName = Environment.GetFolderPath(Environment.SpecialFolder.Windows) + @"\Microsoft.NET\Framework\v4.0.30319\installutil.exe";
_Process.StartInfo.Arguments = _FilePath;
_Process.Start();
_Process.Close();