Skip to main content

13 posts tagged with "C#"

View All Tags

Methods to start process in C# and powershell

· 2 min read
<code class="csharp">private int StartProcess(SoftwareSvr swSvr, string workingDir)
{
Process proc = new Process();
proc.StartInfo.UseShellExecute = true;
proc.StartInfo.WorkingDirectory = workingDir;
proc.StartInfo.FileName = swSvr.Command;

if (swSvr.Args != null && swSvr.Args.Any())
{
proc.StartInfo.Arguments = string.Join(' ', swSvr.Args);
}

bool started = proc.Start();

if (started)
{
return proc.Id;
}
else
{
return -1;
}
}
<code class="csharp">private int StartProcessByPs(SoftwareSvr swSvr, string workingDir)
{
/*
* 1. wmic process call create "cluster\GatewayServer.exe start -id 1", "c:\app\", 但wmic启动的进程中不使用系统的环境变量
* 2. powershell -Command "try{$app = Start-Process -PassThru -FilePath \"cluster\GatewayServer.exe\" -WorkingDirectory \"C:\app\" -ArgumentList \"start -id 5\";echo $app.Id} catch {throw}"
*/
Process proc = new Process();
proc.StartInfo.WorkingDirectory = workingDir;
proc.StartInfo.FileName = @"C:\windows\system32\cmd.exe";
proc.StartInfo.RedirectStandardOutput = true;
var psArgs = string.Empty;

if (swSvr.Args != null && swSvr.Args.Any())
{
psArgs = " -ArgumentList \\\"{string.Join(' ', swSvr.Args)}\\\"";
}

var psCmd = $"/C powershell -Command \"try{{$app = Start-Process -PassThru -FilePath \\\"{swSvr.Command}\\\" -WorkingDirectory \\\"{workingDir}\\\"{psArgs};echo $app.Id}} catch {{throw}}\"";
proc.StartInfo.Arguments = psCmd;
proc.Start();
proc.WaitForExit();
var output = proc.StandardOutput.ReadToEnd();

if (proc.ExitCode != 0)
{
_logger.LogWarning($"Failed to start process: {proc.StartInfo.Arguments}, output: {output}");
return -1;
}
else
{
return int.Parse(output);
}
}

In Powershell

<code class="powershell">$taskName = "DelayStartup";


$t = New-ScheduledTaskTrigger -Once -At (Get-Date).AddSeconds(2);
$t.EndBoundary = (Get-Date).AddSeconds(60).ToString('s');
Register-ScheduledTask -Force -TaskName $taskName -Action (New-ScheduledTaskAction -Execute C:\test.bat) -Trigger $t -Principal (New-ScheduledTaskPrincipal -UserID \\\"NT AUTHORITY\\SYSTEM\\\" -LogonType ServiceAccount -RunLevel Highest) -Settings (New-ScheduledTaskSettingsSet -DeleteExpiredTaskAfter 00:00:01)";


$t = New-ScheduledTaskTrigger -Once -At (Get-Date).AddHours(24);
Register-ScheduledTask -Force -TaskName $taskName -Action (New-ScheduledTaskAction -Execute C:\test.bat) -Trigger $t -Principal (New-ScheduledTaskPrincipal -UserID \\\"NT AUTHORITY\\SYSTEM\\\" -LogonType ServiceAccount -RunLevel Highest);
Start-ScheduledTask -TaskName $taskName;
Start-Job -ScriptBlock { Start-Sleep -s 10; Unregister-ScheduledTask -Confirm -TaskName 'DelayStartup'";};


Register-ScheduledTask -Force -TaskName $taskName -User '\\ContainerAdmin' -Password 'AutoOps#1' -Action (New-ScheduledTaskAction -Execute C:\test.bat);
Start-ScheduledTask -TaskName $taskName";

System.Data.SqlClient.TdsParser.ThrowUnsupportedCollationEncountered when connecting to SqlServer by docker image aspnet:3.1.0-alpine

· 4 min read
<span id="LC1" class="line" lang="docker"><span class="k">FROM</span><span class="s"> mcr.microsoft.com/dotnet/core/aspnet:3.1.0-<span class="idiff left right">alpine</span></span></span>
<span id="LC2" class="line" lang="docker"><span class="k">COPY</span><span class="s"> . /app</span></span>
<span id="LC3" class="line" lang="docker"><span class="k">WORKDIR</span><span class="s"> /app</span></span>
<span id="LC4" class="line" lang="docker"></span>
<span id="LC5" class="line" lang="docker"><span class="k">EXPOSE</span><span class="s"> 5000/tcp</span></span>
<span id="LC6" class="line" lang="docker"><span class="k">ENV</span><span class="s"> ASPNETCORE_URLS http://*:5000</span></span>

<span id="LC11" class="line" lang="docker"><span class="k">ENTRYPOINT</span><span class="s"> ["dotnet", "XXXX.dll"]</span></span>
System.InvalidOperationException: Internal connection fatal error.
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.DrainData(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.ThrowUnsupportedCollationEncountered(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.GetCodePage(SqlCollation collation, TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.TryProcessEnvChange(Int32 tokenLength, TdsParserStateObject stateObj, SqlEnvChange& sqlEnvChange)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK)
at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover)
at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout)
at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance)
at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, Boolean applyTransientFaultHandling, String accessToken)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
<span id="LC1" class="line" lang="docker"><span class="k">FROM</span><span class="s"> mcr.microsoft.com/dotnet/core/aspnet:3.1.0<span style="color: #ff0000;">-buster-slim</span></span></span>
<span id="LC2" class="line" lang="docker"><span class="k">COPY</span><span class="s"> . /app</span></span>
<span id="LC3" class="line" lang="docker"><span class="k">WORKDIR</span><span class="s"> /app</span></span>
<span id="LC4" class="line" lang="docker"></span>
<span id="LC5" class="line" lang="docker"><span class="k">EXPOSE</span><span class="s"> 5000/tcp</span></span>
<span id="LC6" class="line" lang="docker"><span class="k">ENV</span><span class="s"> ASPNETCORE_URLS http://*:5000</span></span>
<span id="LC7" class="line" lang="docker"></span>
<span id="LC11" class="line" lang="docker"><span class="k">ENTRYPOINT</span><span class="s"> ["dotnet", "XXXX.dll"]</span></span>

also occurs in image dotnet:2.1-aspnetcore-runtime : https://github.com/dotnet/dotnet-docker/issues/560 https://github.com/dotnet/SqlClient/issues/81#issuecomment-399375323 https://github.com/dotnet/dotnet-docker/issues/684

<span id="LC1" class="line" lang="docker"><span class="k">FROM</span><span class="s"> mcr.microsoft.com/dotnet/core/aspnet:3.1.0-<span class="idiff left right">alpine</span></span></span>
<span id="LC2" class="line" lang="docker"><span class="k">COPY</span><span class="s"> . /app</span></span>
<span id="LC3" class="line" lang="docker"><span class="k">WORKDIR</span><span class="s"> /app</span></span>
<span id="LC4" class="line" lang="docker"></span>
<span id="LC5" class="line" lang="docker"><span class="k">EXPOSE</span><span class="s"> 5000/tcp</span></span>
<span id="LC6" class="line" lang="docker"><span class="k">ENV</span><span class="s"> ASPNETCORE_URLS http://*:5000</span></span>
<span id="LC7" class="line" lang="docker"></span>
<span style="color: #ff0000;"><span id="LC8" class="line" lang="docker"><span class="k">RUN </span>apk add <span class="nt">--no-cache</span> icu-libs</span>
<span id="LC9" class="line" lang="docker"><span class="k">ENV</span><span class="s"> DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false</span></span></span>
<span id="LC10" class="line" lang="docker"></span>
<span id="LC11" class="line" lang="docker"><span class="k">ENTRYPOINT</span><span class="s"> ["dotnet", "XXXX.dll"]</span></span>
ClustrMaps