如何在Windows中列出已安装程序的GUID?或者,如果我有MSI文件,是否更容易找到GUID?
我正在通过Orca查看MSI文件,但不确定在哪里查找GUID.
谢谢!
我试图实现我的应用程序的安静卸载.如果实际安装了应用程序,则此方法很有用,但是当用户收到错误消息时,必须单击"确定"继续.
我的命令:
__PRE__
问题是我需要在AD中部署的脚本中清理应用程序的所有旧版本.我不知道在什么计算机上安装了什么版本,并且首先让脚本确定是困难的.
如何让MSIEXEC 不要抱怨卸载不存在的GUID?
我的产品有一个帮助程序可执行文件来卸载所有相关的子产品.我根据所有子产品的升级代码卸载.
首先,我使用MsiEnumRelatedProducts函数从升级代码中获取产品代码.然后我尝试使用MsiConfigureProductEx函数卸载产品.
问题MsiConfigureProductEx是返回错误.
调用函数:MsiConfigureProductsEx
返回代码:1605(0x00000645)
描述:此操作仅对当前安装的产品有效.
为什么MsiEnumRelatedProducts返回无效的产品代码?我搜索了Windows注册表,看看是否存在这样的产品代码.没有.如何调试问题?
编辑:添加了重现问题的最小代码.
// UpgradeCodes is an array having upgrade codes of all modules.
TCHAR lpProductCode[GUID_STR_LENGTH];
const TCHAR tszNoReboot[] = _T("REMOVE=ALL REBOOT=ReallySuppress DISABLE_REBOOT_PROMPT=1");
for (size_t i = 0; i < sizeof(UpgradeCodes) / sizeof(UpgradeCodes[0]); i++)
{
tstring tstrUpgradeCode = UpgradeCodes[i];
DWORD dwIndex = 0;
size_t status;
// for each of the upgrade code, get all the products
do
{
status = MsiEnumRelatedProducts(UpgradeCodes[i],
0,
dwIndex,
lpProductCode);
if (ERROR_SUCCESS == …Run Code Online (Sandbox Code Playgroud) 从控制面板和.msi本身卸载带有基于WiX的.msi的应用程序有什么区别吗?
如果有什么呢?
我问的原因如下:
不同之处如下:我的.msi将一些文件存储在%PROGRAMDATA%中.如果我从控制面板卸载那里的文件被卸载(似乎.msi跟踪那些(它们被定义为组件)),但当我打开我的.msi并尝试卸载(我有一个维护对话框)那些文件不会被删除.
另一个区别是:我还有一个自定义操作来停止我的应用程序,如果它正在运行,在InstallUeesecece中调用After ="AppSearch",在InstallExecuteSequence中调用Before ="CostFinalize",但是当从.msi中删除时它不是被召唤.只有一个对话框显示有文件要删除但正在使用但是有些进程,当我告诉它停止它们时它不会这样做.
我必须更换它,因为一个阻止软件卸载的错误,但是如果我使用文件搜索实用程序,Windows无法找到MSI文件,但我认为MSI存储在Add or Remove Programs实用程序可以使用它的某个地方.
我正在编写一个 powershell 脚本来卸载和安装产品。卸载和安装过程只需单击几个填充默认值的下一步按钮即可。
您能否建议如何安装 MSI 文件而不提示用户单击几个下一步按钮并非常安静地完成安装过程。
如果我想在安装过程中提供自定义值,找出属性名称以及如何静默运行它的过程可能是什么。请参阅任何参考资料以进一步探索。
我正在使用 powershell 2.0,如果需要更多信息,请告诉我。提前致谢。
问候, 库马尔
我目前正在编写一个脚本,其中包含许多安装在WES 7设备上的程序卸载.我需要卸载的其中一个应用程序(VMware Horizon View Client)要求重新启动.如果这是脚本的一部分,它似乎接受默认按钮(是)并继续重启设备.因此脚本失败了.
我非常感谢您帮助我们如何防止重启.
仅供参考:此脚本通过管理工具发送,并在目标上以提升的方式运行.
这是我的脚本:
set-executionpolicy unrestricted
#############################################################
# Un-install unwanted applications
#############################################################
$application = Get-WMIObject Win32_Product -filter "Name='ThinPrint Client Windows 8.6'"
$application.Uninstall()
$application = Get-WMIObject Win32_Product -filter "Name='2X Client'"
$application.Uninstall()
$application = Get-WMIObject Win32_Product -filter "Name='Adobe Reader X (10.1.4)'"
$application.Uninstall()
$application = Get-WMIObject Win32_Product -filter "Name='VMware Horizon View Client'"
$application.Uninstall()
$application = Get-WMIObject Win32_Product -filter "Name='VERDE VDI User Tools'"
$application.Uninstall()
$application = Get-WMIObject Win32_Product -filter "Name='vWorkspace Connector for Windows'"
$application.Uninstall()
#############################################################
# Remove Internet Explorer Access …Run Code Online (Sandbox Code Playgroud) 我在理解InstallShield如何处理升级方面遇到了一些麻烦.
我想要的是能够增加安装程序的版本号,重新编译和分发我的安装程序.这应该会自动删除任何以前版本的应用程序,并安装最新版本(它应作为"升级"呈现给用户).
这是一个非常简单的安装程序,它只是从几个Visual Studio项目(应用程序EXE,一些DLL等)输出并将它们全部安装到Program Files中.只有一个功能,它始终安装.
我不想更改产品的升级代码,因为我必须创建新的升级路径(每个以前版本一个),这很麻烦.
我之前尝试过这种方法(增加版本号,但不更改产品代码或升级代码),但每次我运行安装程序以"升级"产品时,都会显示"正在恢复向导" [ProductName]",有时某些文件不会被较新安装程序中较新的对应文件替换.
我没有增加版本号的"修订版"号.我知道这被忽略了.通常,我会尝试类似的东西2.0.3 => 2.0.4.
如何设置InstallShield以便自动删除任何以前的版本,安装最新版本,如果已经安装了以前的版本,则将其作为"升级"或"更新"呈现给用户?如果没有,它应该像平常一样安装("安装",而不是"更新").
我正在使用InstallShield 2013 Pro(版本20 SP1),我坚持在Visual Studio 2010中使用InstallShield编辑器.
我知道我们可以通过传递命令参数来使用其MSI卸载Windows应用程序,如下所示,
Process p = new Process();
p.StartInfo.FileName = "msiexec.exe";
p.StartInfo.Arguments = "/x \"C:\\MyApplication.msi\"/qn";
p.Start();
Run Code Online (Sandbox Code Playgroud)
但我想知道的是如何在不使用MSI的情况下卸载应用程序?在上面的场景中,我应该在特定位置安装MSI来卸载这个应用程序,如果我可以使用产品代码解压缩,那么我就不需要在目标机器上安装MSI.
如何避免从我的 WiX 生成的 MSI 包触发自我修复?
这是一个Q/A 风格的问题,其答案只是列出了一些不要在您的 MSI 文件中做的事情,以避免重复自我修复的最常见原因。
windows ×3
uninstall ×2
wix ×2
.net ×1
batch-file ×1
c# ×1
guid ×1
installation ×1
installer ×1
powershell ×1
winapi ×1
windows-xp ×1