Error C # DirectoryEntry?
-
13-09-2019 - |
Pregunta
Tengo un proyecto de instalación Web. En la configuración que tengo un campo de entrada en el que el usuario puede insertar un connectionstring. Cuando ejecuto la configuración me sale este error:
Error 1001. Error desconocido (0x8000x5000)
Para realizar un seguimiento de dónde existe el error creo un archivo y en cada método escribo algo a este archivo. Ahora creo que el error se incrementa en esta línea:
string friendlySiteName = entry.Properties["ServerComment"].Value.ToString();
Pero no sé cómo corregir este problema. Espero que usted me puede ayudar!
Código:
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();
}
Solución
Si se trata de ninguna de esas causas entonces el atributo probablemente no existe.
Editar
De acuerdo con este , si está usando Win2k8 necesita habilitar "la metabase de IIS y compatibilidad de configuración de IIS6" si obtiene este error. No se instala automáticamente cuando se activa la función de servidor web.
Aquí es una pregunta relacionada .
Otros consejos
if (m_targetSite.StartsWith("/LM/"))
m_targetSite = m_targetSite.Substring(4);
El uso por encima de código antes de esto: -
// Retrieve "Friendly Site Name" from IIS for TargetSite
DirectoryEntry entry = new DirectoryEntry("IIS://LocalHost/" + m_targetSite);
m_siteName = entry.Properties["ServerComment"].Value.ToString();