我正在尝试默默卸载所有以前的Microsoft软件,以便运行vbscript来安装Office 365(可以正常运行)。
这是目前有效的。 使用此处的脚本: https://marckean.wordpress.com/2013/06/18/fully-automate-removal-of-any-version-office-in-preparation-for-office-365/ 从这个链接我用 OffScrub7.vbs& OffScrub10.vbs从理论上卸载了所有Office 2010产品和所有Office 2007产品,但它没有!
运行上面的卸载脚本后,他们仍然会离开Lync 2010和MS Access Database 2007(32位)。
确保卸载所有以前的办公产品的最佳方法,包括OffScrub7.vbs&amp ;;卸载的上述软件。 OffScrub10.vbs?我的猜测是找到无声的vbscripts来卸载Lync 2010和MS Access Database 2007(32位)?
答案 0 :(得分:0)
可以使用简单的c ++代码和msi api卸载所有Microsoft应用程序。
Req。:win 7 pro 适用于32位和64位操作系统。
一个迷你tool.exe,可以包装在vb脚本,PowerShell等中
UPD:
我有一点空闲时间。 我想补充我的答案。我谈到了一个小应用程序,但没有显示一行代码。
现在我们将纠正此事。
1)需要Win7 Pro,64位或32位,没关系。 我们要编译32位编译器的项目,因为我们的应用程序需要在32位和64位操作系统上运行。
2)需要任何Ide,我建议Code :: Blocks。
3)需要mingv32-w64编译器 - 更多信息 - mingw-w64.org
3.1)即使您有32个作为主机运行,也必须为64位和32位操作系统安装两个版本的编译器。我们需要一个64位编译器安装的静态库。
4)创建一个控制台应用程序
5)为项目构建选项 - 添加静态库项目libmsi.a
但是!在32位安装的编译器中只有头文件mhi.n,但库本身不是! 但它是64位版本的安装程序。 在64位编译器安装的Lib文件夹中找到此静态库。
6)代码 - 枚举应用程序(来源:http://mariusbancila.ro/blog/2011/05/01/finding-installed-applications-with-vc/)
必须以管理员权限运行该实用程序。
也就是说,如果我们从powershell脚本运行该实用程序,那么应该使用管理员权限运行powershell。
#include <iostream>
#include <windows.h>
#include <tchar.h>
#include <msi.h>
#include <string>
using namespace std;
string MsiQueryProperty(LPCTSTR szProductCode,
LPCTSTR szUserSid,
MSIINSTALLCONTEXT dwContext,
LPCTSTR szProperty)
{
string value;
DWORD cchValue = 0;
UINT ret2 = ::MsiGetProductInfoEx(
szProductCode,
szUserSid,
dwContext,
szProperty,
NULL,
&cchValue);
if(ret2 == ERROR_SUCCESS)
{
cchValue++;
value.resize(cchValue);
ret2 = ::MsiGetProductInfoEx(
szProductCode,
szUserSid,
dwContext,
szProperty,
(LPTSTR)&value[0],
&cchValue);
}
return value;
}
void MsiEnum()
{
UINT ret = 0;
DWORD dwIndex = 0;
TCHAR szInstalledProductCode[39] = {0};
TCHAR szSid[128] = {0};
DWORD cchSid;
MSIINSTALLCONTEXT dwInstalledContext;
do
{
memset(szInstalledProductCode, 0, sizeof(szInstalledProductCode));
cchSid = sizeof(szSid)/sizeof(szSid[0]);
ret = ::MsiEnumProductsEx(
NULL, // all the products in the context
_T("s-1-1-0"), // i.e.Everyone, all users in the system
MSIINSTALLCONTEXT_USERMANAGED | MSIINSTALLCONTEXT_USERUNMANAGED | MSIINSTALLCONTEXT_MACHINE,
dwIndex,
szInstalledProductCode,
&dwInstalledContext,
szSid,
&cchSid);
if(ret == ERROR_SUCCESS)
{
string name = MsiQueryProperty(
szInstalledProductCode,
cchSid == 0 ? NULL : szSid,
dwInstalledContext,
INSTALLPROPERTY_INSTALLEDPRODUCTNAME);
string publisher = MsiQueryProperty(
szInstalledProductCode,
cchSid == 0 ? NULL : szSid,
dwInstalledContext,
INSTALLPROPERTY_PUBLISHER);
string version = MsiQueryProperty(
szInstalledProductCode,
cchSid == 0 ? NULL : szSid,
dwInstalledContext,
INSTALLPROPERTY_VERSIONSTRING);
string location = MsiQueryProperty(
szInstalledProductCode,
cchSid == 0 ? NULL : szSid,
dwInstalledContext,
INSTALLPROPERTY_INSTALLLOCATION);
cout << name << endl;
cout << " - " << publisher << endl;
cout << " - " << version << endl;
cout << " - " << location << endl;
cout << endl;
dwIndex++;
}
}
while(ret == ERROR_SUCCESS);
}
int main()
{
MsiEnum();
return 0;
}
一段时间后将添加代码,代表他删除应用程序,该应用程序显示在控制面板中已安装程序的列表中。
时间不够,伤心=(
但是你可以尝试编写一个应用程序(如果你感兴趣的话,真的没什么特别的,但仍然非常有趣)