1

首先,这与通过 WiX 使用的 C# 中的自定义操作失败并出现错误 1154的问题非常相似

但是,在我的情况下,我无法辨别解决问题的具体步骤。希望有人能指出我正确的方向。

在我的情况下,我使用 Wise Installation Studio 7.0 执行我编写的 C# 自定义操作,以在 Server 2008 R2 及更高版本上启动 .Net Framework 3.5 SP1 的服务器管理器功能。

我在 Visual Studio 2010 中将自定义操作创建为标准的 .Net 2.0 类库。

我的猜测是我需要在这里做一些不同的事情 - 这需要编译为托管 DLL 之外的东西。我正在使用的代码相当直接......取自 flexera 论坛,其他人在其中发布了针对 Server 2008 R2 上的 .Net Framework 3.5 SP1 问题的解决方案。

using System;
using System.Diagnostics;
using System.IO;
using System.Text;
using Common_Functions;


namespace ActivateDotNetFramework
{
    /**
 * @brief helper library to activate .Net Framework on certain operating systems
 * 
 * @args None
 * 
 * 
 * @author Daniel Lee
 * @date Jan 17,2012
 * @version 1.0
 * @bug 6540 Role Management tool required for 2008R2 to install .NET 3.5 SP1
 **/
    class ActivateDotNetFramework
    {
        static void Main(string[] args)
        {

            string logFile = "ActivateDotNetFeatures.log";
            WriteToLog logWriter = null;
            Process p = null;            
            ProcessStartInfo startInfo = null;

            try
            {
                logWriter = new WriteToLog(logFile, "");
                logWriter.UpdateLog("AMAZINGCHARTS! ActivateDotNetFramework Custom Action");

                //open powershell process to activate the .net framework feature. See: 
                //http://community.flexerasoftware.com/archive/index.php?t-182914.html                
                startInfo = new ProcessStartInfo();
                startInfo.FileName = "powershell.exe";
                startInfo.Arguments = "Import-Module ServerManager ; Add-WindowsFeature as-net-framework";
                startInfo.WindowStyle = ProcessWindowStyle.Hidden;
                startInfo.UseShellExecute = true;

                string sLogMsg = "";
                p = new Process();
                p.StartInfo = startInfo;

                sLogMsg = "ProcessStartInfo Data ... ";
                logWriter.UpdateLog(sLogMsg);
                sLogMsg = "FileName: " + p.StartInfo.FileName + "\n Arguments:" + p.StartInfo.Arguments;
                logWriter.UpdateLog(sLogMsg);

                p.Start();
                p.WaitForExit();
                sLogMsg = "ActivateDotNetFramework Custom Action Return Code: " + p.ExitCode.ToString();
                logWriter.UpdateLog(sLogMsg);
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {

            }
        }
    }
}

关于我应该如何在 VS2010 中进行此操作的任何想法?或者是我的 Wise Installation Studio 包 CA 配置中的问题?据我所见,VS2010 只构建托管的 ActivateDotNetFramework.dll 文件,没有别的。我将此文件添加到我在 wise 包中的资源中,并将函数名称列为 ActivateDotNetFramework。

我已经在这个问题上转了一天多。任何帮助表示赞赏。谢谢。

丹李惊人的图表!发布工程师

4

1 回答 1

1

该代码应编译为 EXE 并作为 EXE 自定义操作运行。但我更大的问题是为什么要打扰?在 Windows 中安装功能所需要做的就是调用:

dism /online /Enable-Feature FeatureName

对于功能名称列表,请键入:

dism /online /Get-Features

于 2012-01-19T21:43:09.900 回答