运行远程触发作业时的模拟

时间:2008-12-23 17:00:07

标签: .net message-queue msmq

我的(.NET)应用程序允许用户调整数据库值。然后,他们需要根据他们的编辑(Crystal或Reporting Services)生成报告,但这并不重要 - 重要的是,这一代人不一定会在他们的本地盒子上发生,例如:他们可能没有在他们的机器上安装Crystal Reports(或其他)。

所以我在网络机器上设置了一个消息队列(可以生成报告),我的应用程序会向该队列发送一条消息,发送一个包含所有必需信息的对象。到现在为止还挺好。

我已经使用规则和触发器配置了目标队列,因此任何新消息都会自动激发该远程计算机上的控制台应用程序以尝试处理该消息。

问题是虽然一切正常,但触发的控制台应用程序作为本地计算机帐户运行。应用程序需要与数据库(使用集成身份验证)进行交互。

当我以实际用户身份运行它时,控制台应用程序运行正常,但在由消息队列触发时则不行。

问题是,我可以将规则,触发器或控制台应用配置为以特定用户身份运行吗?我已经尝试了所有可以看到的配置选项,但无济于事。

也许我可以在应用程序代码中模仿用户(在app.config中)?它在ASP.NET代码中是可行的,但在WinForms代码中看起来并不可行。

编辑:模拟建议效果很好......直到我从Process.Start()函数收到错误“Access is Denied”,调用startwithcreateprocess()。

我冒充的用户有权在本地框上运行该进程(因此它可以本地运行而没有任何问题)。

2 个答案:

答案 0 :(得分:2)

    Process p = new Process();

    p.StartInfo.UseShellExecute = false;

    SecureString password = new SecureString();
    string pwd = "mysecret123";
    foreach (char c in pwd)
    {
        password.AppendChar(c);
    }

    p.StartInfo.Domain = "DomainHere";
    p.StartInfo.UserName = "Natthawut";
    p.StartInfo.Password = password;

    p.StartInfo.FileName = "cmd";
    p.StartInfo.Arguments = "/c dir";
    p.Start();

请参阅.NET安全博客 - http://blogs.msdn.com/shawnfa/archive/2004/06/02/146915.aspx

顺便说一句,我认为这与MSMQ无关:)

编辑:也许我错过了什么。不确定MSMQ如何激发新进程,或者只是用于启动控制台应用程序的应用程序。

答案 1 :(得分:0)

尝试在应用程序中使用模拟?

更粗略地说,你可以运行你的应用程序。