【问题标题】:C# DirectoryEntry Error?C# DirectoryEntry 错误?
【发布时间】:2009-07-14 13:47:24
【问题描述】:

我有一个 Web 设置项目。在设置中,我有一个输入字段,用户可以在其中插入连接字符串。当我运行设置时,我收到此错误:

错误 1001。未知错误 (0x8000x5000)

为了跟踪错误存在的位置,我创建了一个文件,并在每种方法中都向该文件写入了一些内容。现在我认为错误是由这一行引发的:

string friendlySiteName = entry.Properties["ServerComment"].Value.ToString();

但我不知道如何解决这个问题。希望你能帮帮我!

代码:

    public override void Install(System.Collections.IDictionary stateSaver)
    {
        base.Install(stateSaver);

        // Retrieve configuration settings
        string targetSite = Context.Parameters["targetsite"];
        string targetVDir = Context.Parameters["targetvdir"];
        string targetDirectory = Context.Parameters["targetdir"];
        string targetConnectionString = Context.Parameters["targetconn"];

        FileStream f = new FileStream("c:\\myfile.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
        StreamWriter w = new StreamWriter(f);
        w.WriteLine("targetSite: " + targetSite);
        w.WriteLine("targetVDir: " + targetVDir);
        w.WriteLine("targetDirectory: " + targetDirectory);
        w.WriteLine("targetConnectionString: " + targetConnectionString);
        w.Close();
        w.Dispose();
        f.Close();
        f.Dispose();

        ConfigureWebConfig(targetSite, targetVDir, targetConnectionString);
    }

    void ConfigureWebConfig(string targetSite, string targetVDir, string targetConn)
    {
        try
        {
            // Retrieve "Friendly Site Name" from IIS for TargetSite
            DirectoryEntry entry = new DirectoryEntry("IIS://LocalHost/" + targetSite);

            FileStream f = new FileStream("c:\\myfile.txt", FileMode.Append, FileAccess.Write);
            StreamWriter w = new StreamWriter(f);
            w.WriteLine("In ConfigureWebConfig stap 1 ");
            w.Close();
            w.Dispose();
            f.Close();
            f.Dispose();

            string friendlySiteName = entry.Properties["ServerComment"].Value.ToString();

            f = new FileStream("c:\\myfile.txt", FileMode.Append, FileAccess.Write);
            w = new StreamWriter(f);
            w.WriteLine("In ConfigureWebConfig friendlySiteName: " + friendlySiteName);
            w.Close();
            w.Dispose();
            f.Close();
            f.Dispose();

            // Open Application's Web.Config 
            Configuration config = WebConfigurationManager.OpenWebConfiguration("/" + targetVDir, friendlySiteName);
            addConnectionStringAttribute(targetConn, config);

            f = new FileStream("c:\\myfile.txt", FileMode.Append, FileAccess.Write);
            w = new StreamWriter(f);
            w.WriteLine("In ConfigureWebConfig stap 2 ");
            w.Close();
            w.Dispose();
            f.Close();
            f.Dispose();
            // togleCompilationAttribute(config);

            // Persist web.config settings 
            config.Save();

            f = new FileStream("c:\\myfile.txt", FileMode.Append, FileAccess.Write);
            w = new StreamWriter(f);
            w.WriteLine("In ConfigureWebConfig stap 3 ");
            w.Close();
            w.Dispose();
            f.Close();
            f.Dispose();
        }
        catch (Exception)
        {
            throw;
        }

    }

    private static void addConnectionStringAttribute(string connectionStringValue, Configuration config)
    {
        ConnectionStringSettings appDatabase = new ConnectionStringSettings();

        appDatabase.Name = "dataConnectionString"; 
        appDatabase.ConnectionString = connectionStringValue;
        appDatabase.ProviderName = "System.Data.SqlClient";

        FileStream f = new FileStream("c:\\myfile.txt", FileMode.Append, FileAccess.Write);
        StreamWriter w = new StreamWriter(f);
        w.WriteLine("In addConnectionStringAttribute stap 1 ");
        w.Close();
        w.Dispose();
        f.Close();
        f.Dispose();

        config.ConnectionStrings.ConnectionStrings.Clear();
        config.ConnectionStrings.ConnectionStrings.Add(appDatabase);

        f = new FileStream("c:\\myfile.txt", FileMode.Append, FileAccess.Write);
        w = new StreamWriter(f);
        w.WriteLine("In addConnectionStringAttribute stap 2 ");
        w.Close();
        w.Dispose();
        f.Close();
        f.Dispose();
    }

【问题讨论】:

  • 如果确实是问题所在,我们需要有关该行的更多信息。 entry.Properties["ServerComment"] 是否存在? entry.Properties["ServerComment"].Value 是否存在?
  • 我不知道。我不知道如何调试这种项目。写文件我不知道:(
  • 附带说明,我还建议在您的流(以及任何实现 IDisposable 的东西)周围使用“使用”语句。这将确保流被正确关闭和处理,即使发生错误。

标签: c# installation directoryentry


【解决方案1】:
if (m_targetSite.StartsWith("/LM/"))
    m_targetSite = m_targetSite.Substring(4);

在此之前使用上面的代码:-

// Retrieve "Friendly Site Name" from IIS for TargetSite  
DirectoryEntry entry = new DirectoryEntry("IIS://LocalHost/" + m_targetSite);
m_siteName = entry.Properties["ServerComment"].Value.ToString();

【讨论】:

    【解决方案2】:

    也许thisthis 会帮助你。

    如果不是这两个原因,则该属性可能不存在。

    编辑:

    根据this,如果您使用的是 Win2k8,如果您收到此错误,则需要启用“IIS 元数据库和 IIS6 配置兼容性”。启用 Web 服务器角色时不会自动安装。

    Here 是一个相关问题。

    【讨论】:

    • 我有大写的提供商 (IIS)
    • 修剪不起作用。错误是否可能在此行中: DirectoryEntry entry = new DirectoryEntry("IIS://LocalHost/" + targetSite.Trim());然后是参数。我的意思是如果这是一个错误的值,DirectoryEntry 会产生错误还是什么?
    • 根据其他消息来源:是的。如果 url 错误,会出现一些“未知错误”。
    • 你在什么操作系统上运行这个?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    相关资源
    最近更新 更多