致力于将应用程序从我的开发盒部署到客户端.在我运行我的exe的客户端上,我收到错误"'SQLNCLI10'提供程序未在本地计算机上注册.
我正在使用SQL Server 2012进行开发.我尝试在目标计算机上安装sqlncli.msi,但没有运气.
任何人都可以告诉我需要在客户端计算机上安装哪些软件包以使我的应用程序正常工作?如果可能的话,提供一个到所述包的URL?
谢谢!
我有一个 Java 程序,它执行 shell 调用以使用脚本调用 PowerShell。
我的 PS 脚本行如下所示:
execPS:powershell -command "& 'P:/PSScripts/DownloadSslHtml.ps1' -url 'https://somewebsite.com' -outputFile 'P:/DownloadedData/SomeFile.zip' -PFXPath 'P:/Properties/Config/certfile.pfx' -PFXPassword 'cert_password'"
Run Code Online (Sandbox Code Playgroud)
有问题的 PS 脚本具有以下代码:
param([string]$url = "https://somewebsite.com",
[string]$outputFile = "P:/DownloadedData/someoutput.html",
[string]$PFXPath = "P:/Properties/Config/certfile.pfx",
[string]$PFXPassword = "cert_password")
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$cert.Import($PFXPath,$PFXPassword,'UserKeySet')
Invoke-WebRequest -Uri $url -Certificate $cert -OutFile $outputFile -Verbose
Run Code Online (Sandbox Code Playgroud)
如您所见,这非常简单。
我的 Java shell 调用如下所示:
public static String downloadSslWithPshell(String url, String outputFileName, String certName,
String password, boolean waitFor){
String res = "";
try {
ConfigStore configStore = ConfigStore.getInstance();
String driveLetter = …Run Code Online (Sandbox Code Playgroud) 我有许多使用 OpenJDK 11 的 Java 进程在 Windows Server 2019 上运行。该服务器有两个物理处理器和 36 个总内核;这是一台惠普机器。当我启动我的流程时,我会在任务管理器中看到所有内核的工作分配。这很好。然而,在进程运行一段时间后,不是一致的时间量,机器开始只使用一半的内核。
我正在研究一些理论:
JDK 存在一些问题,阻止它始终如一地访问所有内核。
Windows Server 2019 出现问题,限制 Java 访问所有内核。
存在热管理问题,一个处理器变得太热,操作系统将所有处理工作转移到另一个处理器。
超线程和“逻辑”处理器存在一些问题,导致进程无法利用所有内核。
我试过搜索 JDK 问题,但没有找到类似的内容。我去了服务器,虽然它运行起来有点热,但看起来并没有过热。我还没有尝试禁用超线程。我已经尝试了许多参数来强制 JVM 使用所有内核,实际上该进程最初确实使用了所有内核;我可以在任务管理器中看到活动。
有人有什么想法吗?这是一个非常令人困惑的问题,我很感激任何想法。
更新:通过使用任务管理器将 java.exe 进程之一分配给另一个处理器,我能够使其使用另一个处理器。这也适用于命令行上的 java 调用以及使用哪个套接字的参数。
话虽如此,这感觉就像一个黑客。我不明白为什么我必须手动为每个 java 进程分配一个套接字;该工作应该留给操作系统。我仍然不确定问题到底出在哪里,是操作系统还是什么。
有没有办法限制ThreadPool对象将使用的处理器数量?根据文档,"您不能将工作线程数或I/O完成线程数设置为小于计算机中处理器数量的数字."
那么如何限制我的程序不使用所有处理器呢?
我有一个实现我的数据库连接的基类.我有一个继承此基础数据库类的第二个类.第二个类在其中有一些递归,在评估它的值时,它可以实例化第二个类的另一个实例.递归只有几个层次.我正在运行所有单线程.
我的代码将正常运行大约1或2分钟,然后我开始得到一致的错误:"Timeout Expired.在从池中获取连接之前已经过了超时时间".
我的基类有一个析构函数,它在数据库对象上调用.Dispose()方法.我的第二个类有一个析构函数,它关闭基类中的连接对象.
我到数据库的连接字符串指定连接超时= 0.
有关为什么代码将在几分钟内正常工作然后开始尝试连接到数据库的任何想法?我很困惑.
namespace BaseLib2
{
public class TSBase
{
protected StreamWriter logFile;
protected OleDbCommand queryCmd;
protected OleDbCommand exeCmd;
protected OleDbConnection connection;
protected OleDbDataReader reader;
public SqlConnection sqlconn;//used for BCP
public TSBase()
{
}
~TSBase()
{
try
{
queryCmd.Dispose();
exeCmd.Dispose();
reader.Dispose();
connection.Dispose();
sqlconn.Dispose();
}
catch (Exception ex)
{
Console.WriteLine("BaseLib2 destrutor:" + ex.Message);
}
}
public void ConnectToDB()
{
string connString = "Provider=SQLNCLI11;Server=myserver;Database=mydb;Uid=myid;pwd=password;connection timeout=0";
queryCmd = new OleDbCommand();
exeCmd = new OleDbCommand();
connection = new OleDbConnection(connString);
queryCmd.CommandTimeout …Run Code Online (Sandbox Code Playgroud)