小编blt*_*txd的帖子

添加到对的向量

我有一个vectorpair像这样的:

vector<pair<string,double>> revenue;
Run Code Online (Sandbox Code Playgroud)

我想在地图中添加一个字符串和一个double,如下所示:

revenue[i].first = "string";
revenue[i].second = map[i].second;
Run Code Online (Sandbox Code Playgroud)

但由于收入未初始化,因此出现了出界错误.所以我尝试使用vector::push_back这样的:

revenue.push_back("string",map[i].second);
Run Code Online (Sandbox Code Playgroud)

但那说不能采取两个论点.那么,如何可以添加到这个vectorpair

c++ vector std-pair

48
推荐指数
5
解决办法
17万
查看次数

如何从命令行列出已安装的MSI?

我们最近将Windows软件包从RPM(cygwin)切换到了MSI(wix).拥有原生包装是一个非常受欢迎的变化,我们打算坚持下去.但是,MSI对它的功能感到过于复杂,似乎并没有提供一些基本的能力.但我可能错了.

有没有办法从命令行列出所有已安装的MSI?

windows windows-installer

13
推荐指数
3
解决办法
2万
查看次数

为什么MSI需要原始.msi文件才能继续卸载?

正如大多数人可能注意到的那样,当卸载MSI软件包时,Windows将要求提供原始.msi文件.这是为什么?

我只能看到它的缺点:

  • 不适应网络变化.
  • 不适应本地磁盘更改.
  • 用户意外.
  • 通常要求用户离开他们的办公桌并开始讨伐以获得正确的CD.
  • 有点证明装置不是独立的.
  • 促进使用msizap等不安全工具.
  • 这反过来促进了"下一次我只会使用zip文件"的心态.

有人可以对此有所了解吗?

installer windows-installer uninstall msiexec

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

如何同步安装MSI?

要无人参与安装任何MSI包,只需使用以下命令:

msiexec /qn /i package.msi
Run Code Online (Sandbox Code Playgroud)

但是,这会触发异步安装:如果您碰巧链接2个依赖安装,则必须等待第一次安装才能完成.

有没有办法从命令行执行此操作?

windows windows-installer

9
推荐指数
2
解决办法
1513
查看次数

如何合并多个PDB文件?

我们目前正在使用单一命令行工具在Windows和Linux上构建我们的产品.

Si很好地工作,允许我们构建源代码和更好的依赖关系比我们以前的构建系统允许的.这为我们带来了很好的增量和并行构建功能.

为了简要描述构建过程,我们得到通常的:

.cpp -- cl.exe --> .obj and .pdb
multiple .obj and .pdb -- cl.exe --> single .dll .lib .pdb
multiple .obj and .pdb -- cl.exe --> single .exe .pdb
Run Code Online (Sandbox Code Playgroud)

msvc C/C++编译器可以充分支持它.

最近出现了构建一些静态库的需求.根据我们收集的内容,构建静态库的过程如下:

multiple .cpp -- cl.exe --> multiple .obj and a single .pdb
multiple .obj -- lib.exe --> a single .lib
Run Code Online (Sandbox Code Playgroud)

单个.pdb意味着cl.exe只应对所有.cpp源执行一次.这种单一执行意味着我们无法并行化此静态库的构建.这真的很不幸.

我们进一步调查并根据文档(和可用的命令行选项):

  • cl.exe 不知道如何构建静态库
  • lib.exe 不知道如何构建.pdb文件

有人知道合并多个PDB文件的方法吗?我们注定要为静态库建立慢速构建吗?像Incredibuild这样的工具如何解决这个问题?

command-line visual-c++ pdb-files

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

为什么枚举安装的MSI包这么慢?

这是这个问题的后续行动.

我正在使用这个稍微修改过的脚本来枚举所有已安装的MSI包:

strComputer = "."

Set objWMIService = GetObject("winmgmts:" & _
    "{impersonationLevel=impersonate}!\\" & _
    strComputer & _
    "\root\cimv2")

Set colSoftware = objWMIService.ExecQuery _
    ("SELECT * FROM Win32_Product")   

If colSoftware.Count > 0 Then
    For Each objSoftware in colSoftware
        WScript.Echo objSoftware.Caption & vbtab & _
        objSoftware.Version
    Next
Else
    WScript.Echo "Cannot retrieve software from this computer."
End If
Run Code Online (Sandbox Code Playgroud)

然而令人惊讶的是它的糟糕表现.在我的XP盒子上枚举34个已安装的MSI软件包需要3到5分钟!

相比之下,坐在旁边的Linux机箱需要花费7秒来计算1400+ RPM ... 叹息

这有什么线索吗?

wmi windows-installer

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