我尝试从网络应用程序调用 .exe 文件。 但我想要用户调用的文件通过网站的 windows 身份验证进行非个性化。
Process process = new Process();
try
{
process.StartInfo.UseShellExecute = false;
process.StartInfo.FileName = ConfigData.PVDToBudgetDBexePath;
process.StartInfo.CreateNoWindow = false;
process.Start();
log.Info("Process started by " + WindowsIdentity.GetCurrent().Name + " with ID: " + process.Id);
process.WaitForExit();
log.Info("After WaitForExit Process ID: " + process.Id);
}
catch (Exception ex)
{
log.Error("Error executing file with message " + ex.Message);
}
两个信息日志文本均已正确记录。没有发生错误。 但被调用的程序不执行任何操作。没有日志记录,没有写入数据库。 用户对该文件具有可执行权限。
当我从开发服务器调用相同的代码时,它工作正常。
我使用.Net 4.5 和 IIS 7 我发现有关此主题的帖子仅适用于非常旧版本的 .Net 和 IIS,这对我没有帮助。
我做错了什么? 或者我怎样才能找出问题所在?
非常感谢,
编辑: 为了更好地阐明我的意图: 我有这个(自制的)exe 文件,可以将 Excel 表格中的数据导入到数据库中。这需要一些时间。在执行此操作时,它也会将 log4net 的进度记录到数据库中。 我想要一个 UI(Web 应用程序),用户可以触发导入。 在此 UI 上还有一个 ajax 进度条,显示从数据库中的日志表导入 takten 的进度。
我希望此导入过程最多同时运行一个实例。所以我有一个函数来检查进程是否仍在运行。 如果是这样,则不允许启动另一个进程。如果没有,您可以重新开始。
private bool IsRunning(string name)
{
Process[] processlist = Process.GetProcesses();
if (Process.GetProcessesByName(name).Length > 0 )
{
return true;
}
else
{
return false;
}
}
最佳答案
我现在通过 TimeScheduler 启动 exe 文件解决了这个问题。
path = exe 文件的文件路径
arguments = 启动 exe 文件的参数
using Microsoft.Win32.TaskScheduler;
using (TaskService taskService = new TaskService())
{
var taskDefinition = taskService.NewTask();
taskDefinition.RegistrationInfo.Author = WindowsIdentity.GetCurrent().Name;
taskDefinition.RegistrationInfo.Description = "Runs exe file";
var action = new ExecAction(path, arguments);
taskDefinition.Actions.Add(action);
taskService.RootFolder.RegisterTaskDefinition("NameOfTask", taskDefinition);
//get task:
var task = taskService.RootFolder.GetTasks().Where(a => a.Name == "NameOfTask").FirstOrDefault();
try
{
task.Run();
}
catch (Exception ex)
{
log.Error("Error starting task in TaskScheduler with message: " + ex.Message);
}
}
关于asp.net - 通过非个性化从 .NET Web 应用程序启动流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36889154/