小编sce*_*ler的帖子

Wix工具集:"禁止卸载组件后完全清理,因为存在另一个客户端"

今天我发现我的安装程序不再正确卸载了.这意味着从那里卸载后我的应用程序不再显示在控制面板中,但所有文件仍然存在.我查看了日志文件,我看到很多"不允许卸载组件,因为另一个客户端存在",这意味着我搞砸了..

那么清理我的电脑并防止它在未来发生的最佳方法是什么?可能是什么导致了这个?afaik一个没有完全卸载我的应用程序的先前版本是这个错误的原因?

不幸的是,由于各种原因,无法使用VM.

仅供参考:为了开发和测试目的,我通常使用1.0.xxxxx测试和创建安装程序,其中xxxxx通常保持不变.我的升级代码总是一样的.另外我使用的是热量,只要有可能,我就让wix自动生成GUID.此外,我有一个CA在安装后显示我的自述文件,一个用于执行批处理文件(使用powercfg修改注册表项).卸载后,运行可执行文件以导入.reg文件以还原已修改的注册表项(因为它们将由wix卸载).

installer windows-installer wix uninstallation wix3.8

8
推荐指数
3
解决办法
3841
查看次数

导出到文本文件时带换行符的git日志

如何为自定义git日志添加换行符?

git log --pretty=tformat:"%ai %s" > log.log
Run Code Online (Sandbox Code Playgroud)

我想要一个换行符 %s

git line-breaks

8
推荐指数
2
解决办法
4456
查看次数

握手期间检索公共服务器证书密钥

我想使用我的Java应用程序在SSL/TLS握手期间检索Microsoft SQL Server(2012/2014)的已发送公共服务器证书.

我的环境第一:

  • MS SQL设置为使用强制加密
  • 仅接受SSL/TLS连接
  • 其中包括自签名CA和由该CA颁发的证书
  • 颁发的证书由MS SQL服务器使用

为了以编程方式实现此目的,我使用自己的信任管理器实现.请在此处查看相关代码的摘录:

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)

java sql-server ssl

7
推荐指数
1
解决办法
1252
查看次数

没有服务器响应的 SSL 握手与 java 1.8

我正在为 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 没有任何效果。

  • -Dhttps.protocols=TLSv1
  • -Dcom.sun.net.ssl.enableECC=false
  • -Djdk.tls.client.protocols=TLSv1

JDBC 连接属性也是开/关,不同的组合:

  • 加密协议版本=TLSv1.2
  • HostNameInCertificate=my.host.com

我尝试了 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)

java ssl jdbc sql-server-2012 sql-server-2014

6
推荐指数
1
解决办法
5634
查看次数

在jstl 1.2中更新捆绑的taglib标准版本

在我的项目中,我正在使用

  <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标准版本?

java jsp jstl maven

5
推荐指数
1
解决办法
1111
查看次数

Wix-卸载后在findfinalize后如何运行exe?

我正在使用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

谢谢您的帮助!

wix wix-extension wix3.8

3
推荐指数
1
解决办法
4187
查看次数

用自己的实现和信任管理器替换 SSLContext 默认值

基于来自 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 …

java ssl java-8

3
推荐指数
1
解决办法
3595
查看次数

休眠直到文件存在/创建

作为参考,我看过 有没有办法检查文件是否正在使用? 以及如何等到 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)

不知何故,我的这段代码似乎不起作用。可能是什么原因?

c# sleep

1
推荐指数
1
解决办法
5452
查看次数

如何在wix安装程序中的自定义操作中添加真正长的十六进制注册表?

当我尝试使用自定义操作在卸载之前添加一个非常长的注册表值时,我收到错误.

<CustomAction Id="InsertValue" Return="check" Execute="deferred" Impersonate="no" Directory="INSTALLDIR" ExeCommand="&quot;reg add HKEY_CURRENT_USER\Software\Intel\Display\igfxcui\HotKeys&quot; /v 9530 /t REG_BINARY /d <REALLY LONG HEXADECIMAL VALUE>"/>
Run Code Online (Sandbox Code Playgroud)

该值在安装时被删除,我需要在卸载期间将其写回,但是该值超过255个字符,因此它给了我一个字符串溢出错误.

我还有什么其他选择可以将这么长的值写入注册表?

registry wix registrykey

1
推荐指数
1
解决办法
388
查看次数

查询历史记录,了解特定信息的TFS中的一系列变更集

我正在尝试使用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)

不幸的是,这没什么改变.

c# tfs

1
推荐指数
1
解决办法
4655
查看次数

在lua中通过url下载文件

Lua初学者在这里.:)

我正在尝试通过url加载文件,不知何故,我太愚蠢了,无法在此处获取所有代码示例,以便为我工作.

如何在Lua中下载文件,但在工作时写入本地文件

从给定的URL下载和存储文件到lua中的给定路径

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()第二个参数但是没有用.

lua luasocket

1
推荐指数
1
解决办法
5667
查看次数

为什么 if then return break end 在 Lua 的 for 循环中不起作用

我有以下函数,它检查是否在键值表中找到给定参数作为键。如果是这种情况,它应该返回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”

当我尝试运行这个脚本时。我缺少什么?

lua

0
推荐指数
1
解决办法
3977
查看次数

切换整数优先级的大小写

这里筋疲力尽的菜鸟.我基本上有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)

因此,当数字按降序排列时,大数字首先出现,但它们没有最高优先级,可能有一个数字与最高(优先)一个(第一种情况),但它也没有...如果没有人适合我想要拿最高的一个,但那是"迷失".

我该如何解决这个问题?或者我只是过度思考?错误的做法?我的大脑从思考它开始爆炸.

c#

-2
推荐指数
1
解决办法
475
查看次数