首页 > 解决方案 > 从调用 PowerShell 脚本的 C# 启动的进程无法运行 Postgres 数据库查询

问题描述

我有一个 WPF 应用程序,它powershell.exe以我的脚本作为参数作为进程(C# 中的代码)启动。我的 PowerShell 脚本重新启动 Windows 服务并将结果更新到 Postgres 数据库中。

我遇到的问题是从 C# 调用的 PowerShell 脚本无法更新数据库,但是从 PowerShell 控制台本身运行时一切正常。我在数据库更新部分没有收到任何错误,但没有任何东西反映到数据库中。(根据脚本,查询已运行,​​但未反映结果)。

我只在 x64 环境中运行 C# 代码。我无法捕捉到问题的实际出处。

此外,当我重新启动服务器时,一切都按预期工作,但只有一次。之后所有其他部分的工作方式相同,除了数据库更新部分并且也没有错误。

尝试在 x64 位模式下运行 WPF 项目。查询是正确的。

连接到 Postgres 数据库的 PowerShell 代码:

$DBConnectionString = "Driver={PostgreSQL UNICODE(x64)};Server=$MyServer;Port=$MyPort;Database=$MyDB;Uid=$MyUid;Pwd=$MyPass;"
Write-Log $DBConnectionString
$DBConn = New-Object System.Data.Odbc.OdbcConnection
$DBConn.ConnectionString = $DBConnectionString;
$DBConn.Open();
$DBCmd = $DBConn.CreateCommand();
$DBCmd.CommandText = 'UPDATE public."' + 'AllLogs" SET "Status" = ' + $Status +
                     ', "ReturnMessage" = ' + "'" + $ReturnMessage + "'" +
                     ' WHERE "AllLogs"."LogID" = ' + "'" + $LogID + "' ;"
Write-Log $DBCmd.CommandText

$rdr = $DBCmd.ExecuteReader()
$tbl = New-Object Data.DataTable
$tbl.Load($rdr)
$rdr.Close()
$a = $tbl | Format-Table -AutoSize
$DBConn.Close();

启动进程的 C# 代码:

var pi = new ProcessStartInfo();
pi.FileName = "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe";
pi.Arguments = arglist;
pi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
pi.UseShellExecute = true;
pi.Verb = "runas";
var pr = Process.Start(pi);

PowerShell 进程应该能够更新数据库。然后它将反映在应用程序 UI 上。

当我从 PowerShell 控制台启动相同的进程时,一切正常 - 它更新数据库并且同样反映在应用程序 UI 上。但不是当进程从 C# 开始时。

标签: c#databasewpfpostgresqlpowershell

解决方案


推荐阅读