如何在64位机器上不使用shell执行的情况下在C#中启动32位进程?
我在 64 位计算机上有一个 ASP .NET Web 应用程序,需要运行旧版 32 位报告应用程序。
当我使用 UseShellExecute = false
运行程序时,程序退出并显示退出代码:
-1073741502
我无法使用 Shell Execute,因为我必须以不同的方式运行该进程用户。然而,当 Shell Execute 为 true 时,该过程将正常运行(尽管我必须更改 ASP .NET 执行的用户)。
如何使用 C# 启动这个 32 位程序而不使用 shell 执行?
这是我现在的代码:
var pxs = new ProcessStartInfo
{
Arguments = arguments,
CreateNoWindow = true,
Domain = ConfigurationManager.AppSettings["reportUserDomain"],
UserName = ConfigurationManager.AppSettings["reportUserName"],
Password = GetSecureString(ConfigurationManager.AppSettings["reportUserPassword"]),
LoadUserProfile = true,
FileName = ConfigurationManager.AppSettings["reportRuntime"],
UseShellExecute = false
};
var px = new Process
{
StartInfo = pxs
};
px.Start();
px.WaitForExit();
I have an ASP .NET web application on a 64-bit machine that needs to run a legacy 32-bit reporting application.
When I run the program with UseShellExecute = false
, the program exits with exit code:
-1073741502
I can't use Shell Execute because I have to run the process as a different user. Yet, when Shell Execute is true, the process will run fine (although I have to change the user that ASP .NET is executing under).
How can I start this 32-bit program using C# without use shell execute?
Here's the code I have right now:
var pxs = new ProcessStartInfo
{
Arguments = arguments,
CreateNoWindow = true,
Domain = ConfigurationManager.AppSettings["reportUserDomain"],
UserName = ConfigurationManager.AppSettings["reportUserName"],
Password = GetSecureString(ConfigurationManager.AppSettings["reportUserPassword"]),
LoadUserProfile = true,
FileName = ConfigurationManager.AppSettings["reportRuntime"],
UseShellExecute = false
};
var px = new Process
{
StartInfo = pxs
};
px.Start();
px.WaitForExit();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您使用 Windows 本机“LogonUser”方法包围代码(包括
UseShellExecute = true
)会怎样?我已经在一些项目中成功地使用它来完成类似的事情。Fresh Click Media 写了一篇关于此的文章,并编写了一个示例 Impersonate 类: --> http://www.freshclickmedia.com/blog/2008/ 11/programmatic-impersonation-in-c/
但为了完整起见,这是我的版本:
在您的情况下使用它是:
What if you surrounded your code, including
UseShellExecute = true
, with the windows native "LogonUser" method? I've used this successfully in a few projects to do something similar.Fresh Click Media did an article about this and wrote a sample Impersonate class: --> http://www.freshclickmedia.com/blog/2008/11/programmatic-impersonation-in-c/
But for completeness, here's my version of it:
Using it in your case would be: