从我在锁定免费编程上收集到的内容来看,这是非常难以做到的......我同意.只是想一些问题会让我头疼.但我想知道的是,为什么没有广泛使用高级包装器(例如无锁队列和类似的东西)?例如,boost没有锁定免费库,但据我所知,有人建议使用.我的意思是我猜有很多应用程序,你不能避免关键部分是负载的重要部分.那么原因是什么?是吗...
所以我的问题是:为什么使用无锁编程的高级抽象不是很受欢迎,而同时"常规"多线程编程是"在"?
编辑:boost有一个无锁lib :)
我正在使用WiX在测试机器上安装服务.但是当我这样做时,只有在机器上安装它的用户才能在"添加/删除程序"控制面板选项中看到.但是我想让它对机器上的每个用户都可见.
我做了一些研究,并意识到我AllUSERS在.wxs文件中创建安装程序时没有设置属性.
所以我用这行更新了我的脚本<Property Id="AllUSERS" Value="1"/>并创建了安装程序.但仍然只有安装的用户可以在控制面板中看到它.
这是我创建安装程序的脚本.
<?xml version='1.0' encoding='windows-1252'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
<Product Name='Importer Service' Id='PUT-GUID-HERE' UpgradeCode='PUT-GUID-HERE'
Language='1033' Codepage='1252' Version='$(var.version)' Manufacturer='Test'>
<Package Id='*' Keywords='Installer' Description="Imports data"
Manufacturer='Test' InstallerVersion='100' Languages='1033' Compressed='yes'
SummaryCodepage='1252' />
<Media Id='1' Cabinet='ImporterWebService.cab' EmbedCab='yes'
DiskPrompt="CD-ROM #1" />
<Property Id='DiskPrompt' Value="Importer Web Service 1.0 Installation [1]" />
<Property Id="WIXUI_INSTALLDIR" Value="INSTALLDIR" />
<Property Id="AllUSERS" Value="1"/>
<Directory Id='TARGETDIR' Name='SourceDir'>
<Directory Id='ProgramFilesFolder' Name='PFiles'>
<Directory Id='Test' Name='Test1'>
<Directory Id='INSTALLDIR' Name='Importer Service'>
<Component Id='MainExecutable' Guid='*'>
<File Id='ImporterWindowsServiceEXE'
Name='Importer.WindowsService.exe' DiskId='1'
Source='Importer.WindowsService.exe' KeyPath='yes'> …Run Code Online (Sandbox Code Playgroud) 使用以下命令提取msi时出现2203错误.
msiexec/a"C:\ Test\Installer.msi"/ QB targetDIR ="C:\ Test\Eval"/ LV*"C:\ Test\INST_Logfile.log"
在回答时请考虑以下几点:
登录用户和SYSTEM帐户对
%TEMP%,C:\ Windows\Installer 具有完全访问权限.
msi未标记为ReadOnly.
检查Windows安装程序服务,它运行正常.
尝试取消注册并注册msiexec
MSIEXEC /UNREGISTER
MSIEXEC /REGSERVER
Run Code Online (Sandbox Code Playgroud)重启系统
以下是日志中捕获的错误:
MSI (s) (88:A4) [14:09:27:551]: Executing op: DatabaseCopy(DatabasePath=C:\Test\Installer.msi,,CabinetStreams=cab1.cab,AdminDestFolder=C:\Test\,)
MSI (s) (88:A4) [14:09:27:551]: Note: 1: 2203 2: C:\Test\Installer.msi 3: -2147287008
DEBUG: Error 2203: Database: C:\Test\Installer.msi. Cannot open database file. System error -2147287008
MSI (s) (88:A4) [14:09:34:634]: Product: Installer -- The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error …
我们来讨论以下主题.目前正在部署的应用程序有很好的知道xcopy方法.这种方法很难管理依赖项,文件更新等.有一些软件包的帮助下启动应用程序部署的想法,你知道你在Linux的帮助下RPM,但适用于Windows.
所以我有疑问:在Windows经典Windows安装程序(msi)或nuget或其他东西上使用什么包系统更好?
在某些情况下,可能需要检索已部署软件包的MSI升级代码.
常见场景:
这是一个Q/A风格的问题.
这个问题以各种形式出现过,但这不是重复的.我发布了一种使用主MSI自动化接口(或严格来说WMI)的方法.它应该比先前答案的基于注册表的方法更可靠.这个答案也试图总结其他检索方法.
您可能知道,msiexec是一个命令行应用程序,可用于安装MSI文件.您可能知道,您可以在静默或不可见模式下运行它.
如果安装程序要求用户回答有关要安装的部件的具体问题,是否有一些方法可以在msiexec命令行中添加一系列选项来执行此操作?
我认为必须有某种方法来设置MSI文件的默认设置才能实现这一点.MSI文件是如何制作的?它们是通过微软的工具开发的吗?他们可以打开和编辑吗?
在我迄今为止编写的所有程序中,如果我希望它在另一个工作站上工作,我只需复制并粘贴使其运行所需的可执行文件和必要文件(例如:.o文件,二进制文件......).
但是所有为商业用途而构建的程序总是带有安装程序.例如PC游戏.所以我的问题是:当我们只是将文件复制到目标工作站时,安装的主要好处/原因是什么?
- 其中一个原因可能是防止盗版.但除此之外,我确定还有其他更强的理由吗?
如何对两个(或更多)MSI文件进行 " 内容比较 " 并查看文件内部实际不同的内容 - 而不是进行无用的二进制比较?(这显然只告诉我我是否正在处理同一文件的副本).
一些相关和典型的问题场景:
这是一个Q/A风格的问题,主题是比较已编译的MSI文件以确定存在哪些真正的"内容差异".
基本上我们以手动安装程序(Windows powershell脚本)的形式发布我们的更改/修复.它将通过读取配置文件值在特定位置安装指定的.dll和SQL脚本文件(我们将在此文件中配置.dll和Sql脚本位置).相同的powershell脚本具有卸载代码以回滚特定的chage集.
是否有任何选项或机制来为上述要求创建Windows安装程序?
wix ×8
installer ×5
installation ×2
msiexec ×2
powershell ×2
.net ×1
appx ×1
boost ×1
deployment ×1
lock-free ×1
msitransform ×1
msix ×1
nuget ×1
orca ×1
queue ×1
resiliency ×1
vbscript ×1
wmi ×1