.net installutil.exe 与new-service区别


PowerShell交流中心分类: Questions.net installutil.exe 与new-service区别
0
TonyLi asked 7 年 ago

有哪位了解new-service背后是不是调用installutil.exe执行的安装,或者new-service的执行过程
这几天遇到几次通过new-service安装服务失败,提示“无法从命令行或调试启动服务。必须先安装windows服务”,日志提示“系统找不到指定的文件”,部分成功部分失败,同一ISO,失败的通过32位的installutil.exe安装成功了。
默认使用的是64位的ps,代码应该是基于32位的.net 2.0写的。
如果是因为32/64的原因,奇怪的是部分安装成功。
本身.net区分32和64,PS也存在32和64
 
如果在64位PS下面能够识别32位的程序而后以32位的模式执行安装过程,那么貌似ps32位的版本就没必要存在了,但是实际上OS里面又单独列出了一个32位的PS,

所以,是不是PS64只能调用64的.net,PS32则专门调用32的.net?
 
 
 
 

1 Answers
0
Mooser Lee 管理员 answered 7 年 ago

New-Service内部调用的是:CreateServiceW方法,属于Windows API

 // Microsoft.PowerShell.Commands.NativeMethods
[DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
internal static extern IntPtr CreateServiceW(IntPtr hSCManager, [MarshalAs(UnmanagedType.LPWStr)] [In] string lpServiceName, [MarshalAs(UnmanagedType.LPWStr)] [In] string lpDisplayName, uint dwDesiredAccess, uint dwServiceType, uint dwStartType, uint dwErrorControl, [MarshalAs(UnmanagedType.LPWStr)] [In] string lpBinaryPathName, [MarshalAs(UnmanagedType.LPWStr)] [In] string lpLoadOrderGroup, [MarshalAs(UnmanagedType.LPWStr)] [In] string lpdwTagId, [In] IntPtr lpDependencies, [MarshalAs(UnmanagedType.LPWStr)] [In] string lpServiceStartName, [In] IntPtr lpPassword);