C# Process.Start()和用户模拟
我有一个MSI安装程序自定义操作,它调用C# Process.Start()和用户模拟,c#,.net,iis,windows-installer,custom-action,C#,.net,Iis,Windows Installer,Custom Action,我有一个MSI安装程序自定义操作,它调用Process.Start()来运行批处理文件,批处理文件在内部执行许多操作,最后调用iisreset。但在少数计算机上,这是失败的访问拒绝错误。有趣的是,运行MSI的用户可以在命令提示符下执行iisreset。它只有在通过我的流程执行时才会失败 所以我想知道,Process.Start()作为当前权限较低的用户是否正在生成新的进程?如果是,我如何说以同一用户的身份运行,并拥有用户的所有权限?有谁能帮助我更好地理解这一点,并诊断出失败的原因 MSI cre
Process.Start()
来运行批处理文件,批处理文件在内部执行许多操作,最后调用iisreset
。但在少数计算机上,这是失败的访问拒绝错误。有趣的是,运行MSI的用户可以在命令提示符下执行iisreset
。它只有在通过我的流程执行时才会失败
所以我想知道,Process.Start()
作为当前权限较低的用户是否正在生成新的进程?如果是,我如何说以同一用户的身份运行,并拥有用户的所有权限?有谁能帮助我更好地理解这一点,并诊断出失败的原因
MSI created using : Visual Studio 2008
Server : Windows Server 2008
UAC Status : Off
错误消息
重新启动尝试失败。访问被拒绝,
您必须是系统的管理员
远程计算机无法使用此命令。
或者将您的帐户添加到
系统的管理员本地组
远程计算机或连接到域
管理员全局组
任何帮助都将不胜感激 您应该在自定义操作上设置标志(0x800
),以避免最近Windows系统的用户访问控制功能出现问题
有关详细信息,请参阅。您是否在管理模式下运行MSI?如果不是这样的话,很可能就行不通了。为什么windows允许安装程序在不需要管理员模式的情况下执行此操作?@DustinDavis:是的。正如我所说,如果用户可以在命令提示符下执行
iisreset
,这基本上意味着他有权执行该操作。是否有完整源代码示例的最终解决方案?感谢您的回复。那么这是否意味着自定义操作修改系统将始终在权限较低的模式下运行?@Appu,这取决于。非模拟自定义操作将以本地系统
权限运行,但模拟自定义操作将以当前用户的权限运行,如果UAC发挥作用,即使当前用户是管理员
组的成员,权限也会降低。这很有意义。您知道如何设置此属性吗?@Appu,这取决于您的安装技术(VS安装和部署项目、WiX、Wise、InstallShield、InnoSetup等)。您使用的是哪一个?我使用的是Visual Studio安装程序,自定义操作DLL是使用C编写的#