21

我正在开发一个 Windows c# 控制台应用程序,我希望允许用户将其安装到他们的计算机上。

我想让我自己的 Windows Installer 可执行,因为 Visual Studio 中内置的安装部署工具似乎有点缺乏自定义和文档的功能。

因此,因为我想制作自己的 Windows 安装程序,如何将我的程序注册到“添加/删除程序”窗口中,以便他们可以选择再次卸载它,如果他们愿意,它会重新启动我的安装程序以进行删除。

同样,可执行文件显然需要将文件复制到 PC 上的不同位置,即C:\Program Files,我将如何将可执行文件存储在 Windows 安装程序可执行文件中,以便将它们移动到正确的位置。

这可能吗?

感谢您的任何帮助,您可以提供。

4

5 回答 5

38

这是我们用来在“添加/删除程序”中注册我们的程序的例程:

private void CreateUninstaller()
{
    using (RegistryKey parent = Registry.LocalMachine.OpenSubKey(
                 @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", true))
    {
        if (parent == null)
        {
            throw new Exception("Uninstall registry key not found.");
        }
        try
        {
            RegistryKey key = null;

            try
            {
                string guidText = UninstallGuid.ToString("B");
                key = parent.OpenSubKey(guidText, true) ??
                      parent.CreateSubKey(guidText);

                if (key == null)
                {
                    throw new Exception(String.Format("Unable to create uninstaller '{0}\\{1}'", UninstallRegKeyPath, guidText));
                }

                Assembly asm = GetType().Assembly;
                Version v = asm.GetName().Version;
                string exe = "\"" + asm.CodeBase.Substring(8).Replace("/", "\\\\") + "\"";

                key.SetValue("DisplayName", "My Program");
                key.SetValue("ApplicationVersion", v.ToString());
                key.SetValue("Publisher", "My Company");
                key.SetValue("DisplayIcon", exe);
                key.SetValue("DisplayVersion", v.ToString(2));
                key.SetValue("URLInfoAbout", "http://www.blinemedical.com");
                key.SetValue("Contact", "support@mycompany.com");
                key.SetValue("InstallDate", DateTime.Now.ToString("yyyyMMdd"));
                key.SetValue("UninstallString", exe + " /uninstallprompt");
            }
            finally
            {
                if (key != null)
                {
                    key.Close();
                }
            }
        }
        catch (Exception ex)
        {
            throw new Exception(
                "An error occurred writing uninstall information to the registry.  The service is fully installed but can only be uninstalled manually through the command line.",
                ex);
        }
    }
}
于 2012-08-06T02:43:58.567 回答
0

不要构建自己的安装程序,使用经过验证的部署工具,例如: NSISInno SetupWiX。所有这些都是免费的,并且有很多功能。

于 2012-08-05T20:45:14.267 回答
0

您可以尝试使用ClickOnceMicrosoft Installer 技术 (msi)部署您的应用程序。

于 2012-08-05T20:37:12.050 回答
0

在这种情况下,我建议使用 MSI 安装程序,因为它可以让您控制包详细信息(即名称)、在客户端复制文件的位置,并允许添加您想要作为 msi 安装程序一部分包含的额外文件。

于 2012-08-06T02:16:40.580 回答
0

看在上帝的份上,不要使用 clickonce ......这比它的价值更麻烦。如果您没有机器的管理权限并且需要安装某些东西,那么值得花时间请求许可。

于 2016-03-08T15:55:50.483 回答