Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 获取Windows installer安装但命令行未看到的程序的安装路径;其中;_Batch File_Command Line_Windows Installer_Wmic_Installation Path - Fatal编程技术网

Batch file 获取Windows installer安装但命令行未看到的程序的安装路径;其中;

Batch file 获取Windows installer安装但命令行未看到的程序的安装路径;其中;,batch-file,command-line,windows-installer,wmic,installation-path,Batch File,Command Line,Windows Installer,Wmic,Installation Path,我有一个Interop Excel应用程序,通过Window Installer安装,它只包含.dll而不包含executables.exe。它可以通过添加/删除程序和wmic product get name列表看到,但不能通过命令行where(参考) 我正在编写一个批处理文件,以便在安装后修改一些文件。如何在批处理文件中获取此程序的安装路径 我还应该提到的是,尽管添加/删除程序可以看到该程序,但它在中并不存在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Win

我有一个Interop Excel应用程序,通过Window Installer安装,它只包含.dll而不包含executables.exe。它可以通过添加/删除程序和wmic product get name列表看到,但不能通过命令行
where
(参考)

我正在编写一个批处理文件,以便在安装后修改一些文件。如何在批处理文件中获取此程序的安装路径

我还应该提到的是,尽管添加/删除程序可以看到该程序,但它在中并不存在

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

使用WMIC的
where
指定要查找的名称,并
get InstallLocation
显示路径:

for /f "delims=" %%a in ('
    wmic product where "Name='Exact name of your app'" get InstallLocation ^| find "\"
') do set location=%%a

MSI的WMI提供程序始终存在错误。我会使用本机MSIAPI询问组件安装在哪里。()


但我必须建议MSI喜欢“拥有”它的文件。如果有人进行修复,很可能您的修改将成为历史。我建议将MSI转换为包含修改过的文件,并跳过安装后的修改步骤。或者重新设计您的加载项,以便您可以由MSI安装一组基本值,并在MSI不知道的MSI外部复制一组覆盖值。

我猜您将无法找到,因为安装路径不会自动记录在卸载注册表信息中,除非您的安装程序设置了ARPINSTALLLOCATION属性:

或者,您显式创建了一个注册表项,并将其值设置为[TARGETDIR],如果您希望将该位置保存在您控制的某个位置,则以后可以这样做


因此,Chris的答案可能是找到路径的正确方法,并且告诉您不要替换文件也是正确的。安装程序弹性(或添加/删除程序的修复或右键单击MSI文件修复)可能会恢复它们,需要原始MSI。MSI知道安装内容的文件版本。此外,升级或修补程序也可能需要原始MSI。警告买主

感谢@wOxxOm的回复。不幸的是,InstallLocation没有返回任何内容。我也不知道InstallSource、InstallState、Vendor等是否提供了良好的结果。也许这与它是一个en Interop Excel应用程序有关?此外,我的印象是wmic在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall中查询已安装的程序,在其中我看到许多程序也没有InstallLocation。我可以安装此应用程序进行测试吗?否则我只能建议通过
reg query
搜索注册表,这里有很多例子。另外
WMIC softwarelement get Path
()或
softwarefeact
可能会有帮助。请尝试运行
WMIC softwarelement,其中“name like'%SOMETHING%'”获取名称、标题、路径
谢谢。我使用C语言,所以滑动C++代码并不是我的主管想要的。此外,据我所知,它从YHKYEA LoalAlxMault\Skuts\WinWOWSX查询,正如我在与WOXXOM讨论中提到的,不包含关于安装位置的信息/调用来自C的Win32 API的代码不在C++代码中滑动。此外,MSI API不会从您提到的密钥中获取信息,而是从HKCR\Software\Installer中自己的数据存储中获取信息。可以是HKLM或HKCU,具体取决于提供给函数的dwContext。