【问题标题】:Problems with creating custom action in VS2010在 VS2010 中创建自定义操作的问题
【发布时间】:2014-11-27 12:32:21
【问题描述】:

我正在尝试为简单的 TEST 创建一个非常简单的自定义操作,但是当我运行安装项目时它不起作用。 这是安装程序类的代码。现在我只想显示一个简单的控制台消息,以证明代码正在执行。

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Linq;


namespace InstallerRemoveCM
{
[RunInstaller(true)]
public partial class InstallerRemoveCM : System.Configuration.Install.Installer
{
    public InstallerRemoveCM()
    {
        InitializeComponent();
    }

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
    public override void Install(IDictionary stateSaver)
    {
        base.Install(stateSaver);

        Console.Write("aasdasdasda1");
    }

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
    public override void Commit(IDictionary savedState)
    {
        base.Commit(savedState);

        Console.Write("aasdasdasda2");

    }

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
    public override void Rollback(IDictionary savedState)
    {
        base.Rollback(savedState);
        Console.Write("aasdasdasda3");
    }

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
    public override void Uninstall(IDictionary savedState)
    {
        base.Uninstall(savedState);
        Console.Write("aasdasdasda4");
    }
}

}

我尝试了 CustomActionData 中的所有内容:

/目标 = [TARGETDIR]

/target = "[TARGETDIR]"

/target = "[TARGETDIR]\"

当 CustomActionData 为空时,安装会一直运行到最后,但不会显示控制台消息。否则,如果 CustomActionData 有前面提到的一些参数,安装会抛出这个消息:

初始化安装时出现错误 1001 异常

好人,任何帮助都会受到欢迎 谢谢。

【问题讨论】:

  • 您不能在 VS 2010 自定义操作中使用 console.write,因为这些自定义操作不在交互式用户的上下文中运行。如果是“所有人”安装,则代码使用系统帐户运行,并且系统帐户无法与桌面交互,甚至可能没有可以写入的控制台。

标签: visual-studio-2010 installation custom-action


【解决方案1】:

最后我更改了代码,目标是在安装过程后删除一个目录 ("C:\Program Files(x86)\ .... \cm")。现在提交部分看起来像这样:

....

   [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
    public override void Commit(IDictionary savedState)
    {
        base.Commit(savedState);
        var DirectorioInstalacao = Path.GetFullPath(Context.Parameters["targetdir"] + "/cm");
        File.Delete(DirectorioInstalacao.ToString());            
    }

... CustomActionData 有这个:/targetdir="[TARGETDIR]\"

所以现在“安装程序类”中包含的说明由安装项目执行,但出现了另一个错误:

“错误1001。在安装配置阶段发生异常。将忽略此异常并继续安装。但安装完成后应用程序可能无法正常工作。访问路径“C:\ Program Files( x86) \ .... \ cm" 被拒绝"

或者类似的,因为我的操作系统是葡萄牙语的。

请问,有人知道如何解决这个问题吗?

【讨论】:

  • 您不应该使用 + 来构建路径。在这种情况下可能会导致问题,这是一种不好的做法。你应该做一个 Path.Combine。所以这可能是一个安全问题,但首先使用 Path.Combine 因为 1)Targetdir 已经以反斜杠结尾,并且 2)您使用的是正斜杠,即使在葡萄牙语中也可能不正确。
猜你喜欢
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多