我有一个名为MyCustomUpdater.exe的程序,它下载Windows服务zip文件并将其解压缩。
Extract文件夹包含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之后我设置了它。 右键单击Program>物业>申请>资源>清单[点击下拉列表] 并选择 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);
或
Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.Windows) + @"\Microsoft.NET\Framework\v4.0.30319\installutil.exe" + " /u ", _FilePath);
不工作
Bellow是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>
帮助我。
由于
答案 0 :(得分:0)
当您可以直接执行安装可执行文件时,以这种方式使用cmd.exe
似乎有点不寻常。但是如果你真的想使用cmd.exe
和STDIN重定向。那么你需要通过传递“/ K”开关来使用交互模式。
有关详细信息,请参阅此answer。
答案 1 :(得分:0)
您应该运行尝试以管理员身份呼叫installutil.exe
的程序,然后直接运行installutil.exe
,而无需cmd
的帮助。此外,我发现PInvoke更稳定(请参阅OpenSCManager
,CreateService
)。
答案 2 :(得分:0)
已经完成了
在app.manifest程序的帮助下,以管理员模式运行。 [代码如上]
Bellow是以“静音”模式安装Windows服务的代码。
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();
谢谢大家。