如何从已发布的ASP.NET网站

时间:2016-04-12 21:41:24

标签: c# asp.net iis windows-services exe

我想从我的网站运行ntrights.exe。为此,我在项目中添加ntrights.exe作为嵌入式资源,然后在运行时代码将所有位提取到名为tempFile.exe的新文件,使用此exe创建一个新进程,&跑吧。

以下是运行ntrights.exe的代码:

public void GiveLogOnAsAServiceRights(string server, LoginInfo credentials)
{
    string tempPathForExe = "C:\\Websites\\MyWebAppDirectory";
    string ntRightsTempFileName = "tempfile.exe";
    string fullNtRightsTempPath = Path.Combine(tempPathForExe, ntRightsTempFileName);

    System.IO.Directory.CreateDirectory(tempPathForExe);
    //Resource below is a resx file. ntrights is the ntrights.exe file I want to execute. It is an embedded resource.
    System.IO.File.WriteAllBytes(fullNtRightsTempPath, Resource.ntrights);

    Process objProcess = new Process();
    objProcess.StartInfo.FileName = fullNtRightsTempPath;
    //These args grant the provided user log on as a service rights on the given server
    objProcess.StartInfo.Arguments = " +r SeServiceLogonRight -u " + credentials.Domain + "\\" + credentials.Username + " -m \\\\" + server;
    objProcess.StartInfo.Domain = "myDomain";
    objProcess.StartInfo.UserName = "myUsername";
    objProcess.StartInfo.Password = ToSecureString("myPassword");
    objProcess.StartInfo.UseShellExecute = false;
    objProcess.StartInfo.CreateNoWindow = false;
    objProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
    objProcess.StartInfo.WorkingDirectory = "C:\\Websites\\MyWebAppDirectory";

    string connectionString = string.Empty;

    //During these next two functions, a console is supposed to pop up and tell me what it is doing... but it doesn't
    objProcess.Start();
    objProcess.WaitForExit();

    if (objProcess.HasExited)
    {
        System.IO.File.Delete(fullNtRightsTempPath);
        objProcess.Close();
        return;
    }
}

这很有效&我看到一个窗口&输出&它运作成功!...只要我在Visual Studio中使用F5在IIS Express上运行它。 问题是,当我右键点击项目&单击“发布”并发布到设置完整IIS网站的本地目录,然后可执行文件不再运行。调试时没有创建或输出窗口。

到目前为止我如何排除故障?

(1)我尝试将文件直接引用到构建输出&使用Appdomain.CurrentDomain.CurrentDirectory并找到exe&的路径以这种方式运行它。这并没有解决问题。

(2)确保在IIS中将加载用户配置文件设置为true,并确保我的用户配置文件对网站所在的文件夹具有明确的完全控制权限。这不能解决问题。

(3)重定向新进程的StandardOutput和StandardError,以读取新进程的输出文本。输出是一个空字符串。

(4)将工作目录更新为写入exe的当前目录。这并没有改变结果。

我知道从我的网络应用程序运行exe不是最好的主意,但是这是它需要完成的方式。当我从Visual Studio运行代码时,它可以正常工作,因此我猜测有一种方法可以让它在IIS中运行。请帮忙!

谢谢!

0 个答案:

没有答案