【问题标题】:How to write a custom uninstaller code in C++ for deleting user generated files in Visual Studio 2008如何在 C++ 中编写自定义卸载程序代码以在 Visual Studio 2008 中删除用户生成的文件
【发布时间】:2015-10-16 08:19:13
【问题描述】:

我已经阅读了许多关于在 Visual Studio 中编写自定义操作的在线文章和博客,但是我完全不清楚这样做的方法。我的安装项目是 C++。任何人都可以分步指导如何在 C++ 中编写自定义卸载程序。

我的安装项目创建了以下文件结构:

设置

-->输入-->file.txt

-->程序-->PrimaryOutput(Active)

-->输出

成功运行安装程序后,将在输出文件夹中创建文件,该文件夹在卸载安装程序期间保留在那里。如何在 C++ 中编写自定义卸载程序,以便在卸载后完全删除所有文件。

编辑:我已经能够像这样创建自定义操作模板:

#include "stdafx.h"

extern "C" UINT _stdcall Install(MSIHANDLE hInstall)
{
    return ERROR_SUCCESS;
}

extern "C" UINT _stdcall Commit(MSIHANDLE hInstall)
{
    return ERROR_SUCCESS;
}

extern "C" UINT _stdcall Rollback(MSIHANDLE hInstall)
{
    return ERROR_SUCCESS;
}

extern "C" UINT _stdcall Uninstall(MSIHANDLE hInstall)
{
    return ERROR_SUCCESS;
}

我应该如何继续编写删除方法中的输出文件夹的代码。

【问题讨论】:

  • 如果卸载程序只需要删除一些目录或文件,您可以使用一些系统调用。看看stackoverflow.com/questions/2256945/…
  • 这通常是一个有问题的想法,因为 Windows 是多用户的。用户生成的文件可能由多个不同的用户拥有,其中没有一个是执行卸载程序的管理员。这个想法适用于由单个非管理员用户安装的应用程序(即在Program Files之外)

标签: c++ windows visual-studio-2008 custom-action


【解决方案1】:

有这个: http://www.codeproject.com/Articles/570751/DevMSI-An-Example-Cplusplus-MSI-Wix-Deferred-Custo

并且 VS 自定义操作被延迟,所以它会为你工作。

或者这个:

http://www.codeproject.com/Articles/1747/MSI-Custom-Action-DLL

无论如何,这就是你开始的地方。

如果您使用任何其他安装工具,它可以让您访问 MSI 的 RemoveFile 功能,因此不需要任何类型的自定义操作。

【讨论】:

  • 感谢@PhilDW 的有用链接。你能看看我更新的问题吗?
  • 您需要更明确地了解“编写代码”。这是否意味着您不了解 DeleteFile Win32 API?还是 FindFirstFile/FindNextFile?这就是您需要的代码。
猜你喜欢
  • 1970-01-01
  • 2019-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
相关资源
最近更新 更多