今天我发现我的安装程序不再正确卸载了.这意味着从那里卸载后我的应用程序不再显示在控制面板中,但所有文件仍然存在.我查看了日志文件,我看到很多"不允许卸载组件,因为另一个客户端存在",这意味着我搞砸了..
那么清理我的电脑并防止它在未来发生的最佳方法是什么?可能是什么导致了这个?afaik一个没有完全卸载我的应用程序的先前版本是这个错误的原因?
不幸的是,由于各种原因,无法使用VM.
仅供参考:为了开发和测试目的,我通常使用1.0.xxxxx测试和创建安装程序,其中xxxxx通常保持不变.我的升级代码总是一样的.另外我使用的是热量,只要有可能,我就让wix自动生成GUID.此外,我有一个CA在安装后显示我的自述文件,一个用于执行批处理文件(使用powercfg修改注册表项).卸载后,运行可执行文件以导入.reg文件以还原已修改的注册表项(因为它们将由wix卸载).
如何为自定义git日志添加换行符?
git log --pretty=tformat:"%ai %s" > log.log
Run Code Online (Sandbox Code Playgroud)
我想要一个换行符 %s
我想使用我的Java应用程序在SSL/TLS握手期间检索Microsoft SQL Server(2012/2014)的已发送公共服务器证书.
我的环境第一:
为了以编程方式实现此目的,我使用自己的信任管理器实现.请在此处查看相关代码的摘录:
SSLSocket sslSocket = (SSLSocket) getFactory().createSocket(socket, host, port, true);
sslSocket.startHandshake();
Run Code Online (Sandbox Code Playgroud)
getFactory():
private SSLSocketFactory getFactory() throws IOException
{
// irrelevant code removed here
return factory();
}
Run Code Online (Sandbox Code Playgroud)
厂():
private static SSLSocketFactory factory() throws NoSuchAlgorithmException, KeyManagementException
{
SSLSocketFactory factorySingleton;
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, getTrustManager(), null);
factorySingleton = ctx.getSocketFactory();
return factorySingleton;
}
Run Code Online (Sandbox Code Playgroud)
getTrustManager():
private static TrustManager[] getTrustManager()
{
X509Certificate[] server = null;
X509Certificate[] client = null;
X509TrustManager tm = new X509TrustManager() …
Run Code Online (Sandbox Code Playgroud) 我正在为 Microsoft SQL Server 2012 和 2014 使用 Progress DataDirect (glorious...) JDBC 驱动程序。两台服务器都是完全更新的窗口以及 SQL 服务器。两者都强制加密。
我现在正尝试使用符合 FIPS 的信任存储和适当的 java.security 文件、jar、无限强度密码套件,通过我的 java 客户端应用程序连接到它们。信任存储包含我自己的 CA 的自签名证书。使用的算法是RSA。
使用 JDK 1.7.0_21 它可以完美运行,但是当我更改为 1.8.0_74(最近的 afaik)时它失败了,因为 SQL 服务器不想在 ClientHello 之后回复。之后它只是通过连接重置断开连接。
此外,我尝试以不同的组合独立地设置这些属性,但对 JDK 1.8 没有任何效果。
JDBC 连接属性也是开/关,不同的组合:
我尝试了 TLS 1.2、1.1 和 1,但没有任何效果。
由于它适用于 JDK 1.7,我倾向于认为 JDK 1.8 破坏了这种机制。
JDK 1.8 的调试日志包含这个与 JDK 1.7 完全不同的日志条目
1.8:
Ignoring unavailable cipher suite: TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
Ignoring unavailable cipher suite: TLS_RSA_WITH_AES_128_GCM_SHA256
Ignoring unavailable cipher suite: TLS_RSA_WITH_AES_256_GCM_SHA384
Ignoring unavailable …
Run Code Online (Sandbox Code Playgroud) 在我的项目中,我正在使用
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<type>jar</type>
</dependency>
Run Code Online (Sandbox Code Playgroud)
但是在我们的安全团队评估了jar之后,发现捆绑的org.apache.taglibs:standard jar版本为1.2.1,存在安全漏洞(https://web.nvd.nist.gov/view/vuln/detail ?vulnId = CVE-2015-0254)。Apache已在1.2.3版(https://tomcat.apache.org/taglibs/standard/)中对其进行了修复。
另外,META-INF/c.tld
表明它实际上是JSTL 1.1版而不是1.2 版(请参阅JSTL 1.2版,但从Maven Repository交付了1.1版)。也许此错误与错误的taglibs标准版本有关?
但是,我该怎么做才能在jstl中更新捆绑的taglibs标准版本?
我正在使用wix安装程序进行覆盖(读取:修改现有的注册表值),添加新的注册表值等。卸载后,我需要将它们恢复为原始状态(我修改的状态)。由于Wix不支持此功能,因此我必须使用自定义操作(如我所读),我想运行一个exe,它将使用来运行.reg文件reg import
。根据此站点:http : //www.installsite.org/pages/en/isnews/200108/index.htm我的自定义操作必须运行,After="InstallFinalize"
因为wix回滚会删除我的注册表导入(作为回滚的一部分)。所以从本质上来说,它看起来像这样:安装程序修改reg值,卸载程序删除所有涉及的注册表更改(回滚的一部分),我的exe将还原它们。
所以,我根据他如何,与提升的权限等。开始我的exe文件没有 http://wixtoolset.org/documentation/manual/v3/customactions/qtexec.html
<Component Id="registry" Guid="*">
<File Id="regexe" Source="RegistryRollback.exe"/>
<File Id="regfile" Source="Reg_rollback.reg" />
</Component>
<Property Id="LaunchRegExe" Value="[#regexe]" />
<CustomAction Id="LaunchRegExe" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" Impersonate="no"/>
<Custom Action='LaunchRegExe' After='InstallFinalize'>Installed AND NOT UPGRADINGPRODUCTCODE</Custom>
Run Code Online (Sandbox Code Playgroud)
但是我得到了 Error 19 ICE77: LaunchRegExe is a in-script custom action. It must be sequenced in between the InstallInitialize action and the InstallFinalize action in the InstallExecuteSequence table C:\Merlin\Main\Demo\KioskDemoSetup\nw_setup\nw.wxs 250 1 nw_setup
谢谢您的帮助!
基于来自 Jcs(HttpUnit WebConversation SSL Issues)的这个答案,我尝试SSLContext.getDefault()
用我自己的信任管理器替换它。
SSLContext ssl = SSLContext.getDefault();
ssl.init(null, new X509TrustManager[]{new AnyTrustManager()}, null);
ssl.setDefault(ssl);
Run Code Online (Sandbox Code Playgroud)
AnyTrustManager():
import java.security.cert.X509Certificate;
import javax.net.ssl.X509TrustManager;
public class AnyTrustManager implements X509TrustManager
{
X509Certificate[] client = null;
X509Certificate[] server = null;
public void checkClientTrusted(X509Certificate[] chain, String authType)
{
client = chain;
}
public void checkServerTrusted(X509Certificate[] chain, String authType)
{
server = chain;
}
public X509Certificate[] getAcceptedIssuers()
{
return new X509Certificate[0];
}
}
Run Code Online (Sandbox Code Playgroud)
我需要这样做是因为第 3 方 .jar 仅使用 SSLContext 默认值,这会导致我出现一些问题,因此在此操作期间,我必须将默认值更改为其他内容,然后再将其更改回来。
不幸的是,这将引发 java.security.KeyManagementException: Default SSLContext …
作为参考,我看过 有没有办法检查文件是否正在使用? 以及如何等到 File.Exists?
但我想避免使用 SystemWatcher,因为它似乎有点过头了。我的应用程序正在调用 cmd prompt 来创建一个文件,因为我的应用程序无法知道它何时完成,只要该文件不存在,我就想使用 Sleep()。
string filename = @"PathToFile\file.exe";
int counter = 0;
while(!File.Exists(filename))
{
System.Threading.Thread.Sleep(1000);
if(++counter == 60000)
{
Logger("Application timeout; app_boxed could not be created; try again");
System.Environment.Exit(0);
}
}
Run Code Online (Sandbox Code Playgroud)
不知何故,我的这段代码似乎不起作用。可能是什么原因?
当我尝试使用自定义操作在卸载之前添加一个非常长的注册表值时,我收到错误.
<CustomAction Id="InsertValue" Return="check" Execute="deferred" Impersonate="no" Directory="INSTALLDIR" ExeCommand=""reg add HKEY_CURRENT_USER\Software\Intel\Display\igfxcui\HotKeys" /v 9530 /t REG_BINARY /d <REALLY LONG HEXADECIMAL VALUE>"/>
Run Code Online (Sandbox Code Playgroud)
该值在安装时被删除,我需要在卸载期间将其写回,但是该值超过255个字符,因此它给了我一个字符串溢出错误.
我还有什么其他选择可以将这么长的值写入注册表?
我正在尝试使用C#和TFS从TFS中的变更集的注释中获取发布日志.
我有这个代码:
const string tfsURL = "http://dev.ger.test.com:8080/tfs";
var tpc = new TfsTeamProjectCollection(new Uri(tfsURL));
VersionControlServer vcs = (VersionControlServer)tpc.GetService(typeof(VersionControlServer));
var tp = vcs.GetTeamProject(@"MyCollection");
var path = tp.ServerItem;
path += @"/Project/Subproject";
var q = vcs.QueryHistory(path, VersionSpec.Latest, 0, RecursionType.Full, null, null, null, 1, true, true, false, false);
foreach (var item in q)
{
Console.WriteLine(item);
Logger(item.ToString(), false);
}
Run Code Online (Sandbox Code Playgroud)
哪个有效,但它只返回最新的变更集和此变更集内的所有信息.
所以我的问题是:
如何在查询历史中指定一个变更集范围,如VersionSpec.1000到VersionSpec.Latest?
如何在foreach循环中操作项目以显示item.Comment等特定信息?
任何帮助是极大的赞赏!
编辑:我编辑了QueryHistory
var q = vcs.QueryHistory(path, VersionSpec.Latest, 0, RecursionType.Full, null, new ChangesetVersionSpec(23618), VersionSpec.Latest, 1, true, true, false, false);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这没什么改变.
Lua初学者在这里.:)
我正在尝试通过url加载文件,不知何故,我太愚蠢了,无法在此处获取所有代码示例,以便为我工作.
socket = require("socket")
http = require("socket.http")
ltn12 = require("ltn12")
local file = ltn12.sink.file(io.open('test.jpg', 'w'))
http.request {
url = 'http://pbs.twimg.com/media/CCROQ8vUEAEgFke.jpg',
sink = file,
}
Run Code Online (Sandbox Code Playgroud)
我的程序运行20 - 30s,之后没有保存.有一个创建的test.jpg但它是空的.我也尝试将w + b添加到io.open()
第二个参数但是没有用.
我有以下函数,它检查是否在键值表中找到给定参数作为键。如果是这种情况,它应该返回true
并跳出循环。如果什么也没找到,那就什么也不做。
function checkId(id)
for k,v in pairs(info) do
if id == tostring(k) then
return true
break -- break out of loop. mission accomplished.
end
end
end
Run Code Online (Sandbox Code Playgroud)
我得到一个
预期“end”(在第 192 行关闭“do”)接近“break”
当我尝试运行这个脚本时。我缺少什么?
这里筋疲力尽的菜鸟.我基本上有2个问题......
很抱歉澄清交换机在一个循环中,它获取了一堆数字,然后使用OrderByDescending()对它们进行排序.我的问题是现在我不知道有哪些数字,我只知道它们是按降序排序的.现在我优先考虑一些特定数字对我来说比其他数字更重要(背后没有规则或逻辑).但另一方面,我所寻找的数字中没有一个可能在里面,所以作为一个"默认"返回或者在集合中有最高数字的工作.
1:是开关案例顺序敏感?假设我打开1到5的范围,对我来说4优先级高于剩下的那个按预期工作?
switch(number)
{
case 4: DoFancyStuff(); break;
case 3: NotTooFancy(); break;
case 1: StillOk(); break;
case 2: Bad(); break;
case 5: SuperBad(); break;
default:break;
}
Run Code Online (Sandbox Code Playgroud)
无论如何,进一步假设数字按降序排序.但我现在不知道可能的范围number
,它可能是2,4,8,16等等,但可能缺少一些数字:2,4,16 ......
所以,如果我不得不说
switch(number)
{
case 32: Nice(); break;
case 64: OkToo(); break;
case 128: Nah(); break;
case 8: OkStillTakeIt(); break;
default: break;
}
Run Code Online (Sandbox Code Playgroud)
因此,当数字按降序排列时,大数字首先出现,但它们没有最高优先级,可能有一个数字与最高(优先)一个(第一种情况),但它也没有...如果没有人适合我想要拿最高的一个,但那是"迷失".
我该如何解决这个问题?或者我只是过度思考?错误的做法?我的大脑从思考它开始爆炸.