1 namespace ClassLib 2 3 { 4 5 [RunInstaller(true)] 6 7 public class ClassLib : Installer 8 9 { 10 11 public override void Install(System.Collections.IDictionary stateSaver) 12 13 { 14 15 base.Install(stateSaver); 16 17 // Retrieve configuration settings 18 19 string targetSite = Context.Parameters["TargetSite"]; 20 21 string targetVDir = Context.Parameters["TargetVdir"]; 22 23 string targetDir = Context.Parameters["TargetDir"]; 24 25 if (targetSite.StartsWith("/LM/")) 26 27 { 28 29 targetSite = targetSite.Substring(4); 30 31 writeEventLogs(); 32 33 //adjust the web.config file. 34 35 createConnectionString(targetSite, targetVDir, targetDir); 36 37 //create ASP.Net 2 site... 38 39 RegisterScriptMaps(targetSite, targetVDir); 40 41 } 42 43 } 44 45 46 47 void RegisterScriptMaps(string targetSite, string targetVDir) 48 49 { 50 51 // Calculate Windows path 52 53 string sysRoot = System.Environment.GetEnvironmentVariable("SystemRoot"); 54 55 //get the latest .net framework directory 56 57 DirectoryInfo di = new DirectoryInfo(sysRoot + "/Microsoft.NET/Framework"); 58 59 60 61 DirectoryInfo[] frameworkDir = di.GetDirectories("v2.0.*", SearchOption.TopDirectoryOnly); 62 63 64 65 int big = 0; 66 67 for (int i = 0; i < frameworkDir.Length; i++) 68 69 { 70 71 int current = Convert.ToInt32(frameworkDir[i].Name.Substring(5)); 72 73 if (current > big) 74 75 { 76 77 big = current; 78 79 } 80 81 } 82 83 string latestFramework = di.FullName + "\\v2.0." + big.ToString(); 84 85 // Launch aspnet_regiis.exe utility to configure mappings 86 87 ProcessStartInfo info = new ProcessStartInfo(); 88 89 info.FileName = latestFramework + "\\aspnet_regiis.exe"; 90 91 info.Arguments = string.Format("-s {0}/ROOT/{1}", targetSite, targetVDir); 92 93 info.CreateNoWindow = true; 94 95 info.UseShellExecute = false; 96 97 Process.Start(info); 98 99 } 100 101 void writeEventLogs() 102 103 { 104 105 //for debugging purposes write these values to eventlog. 106 107 EventLog.WriteEntry("o!Web Server", Context.Parameters["Server"]); 108 109 EventLog.WriteEntry("o!Web User", Context.Parameters["Username"]); 110 111 EventLog.WriteEntry("o!Web Password", Context.Parameters["Password"]); 112 113 EventLog.WriteEntry("o!Web Target Directory", Context.Parameters["TargetDir"]); 114 115 EventLog.WriteEntry("o!Web Target Site", Context.Parameters["TargetSite"]); 116 117 EventLog.WriteEntry("o!Web Virtual Directory", Context.Parameters["TargetVdir"]); 118 119 } 120 121 void createConnectionString(string targetSite, string targetVDir, string targetDir) 122 123 { 124 125 // Retrieve "Friendly Site Name" from IIS for TargetSite 126 127 DirectoryEntry entry = new DirectoryEntry("IIS://LocalHost/" + targetSite); 128 129 string friendlySiteName = entry.Properties["ServerComment"].Value.ToString(); 130 131 //set the connection timeout property 132 133 entry.Properties["ConnectionTimeout"][0] = 1800; 134 135 entry.CommitChanges(); 136 137 entry = new DirectoryEntry("IIS://LocalHost/" + targetSite + "/ROOT/" + targetVDir); 138 139 entry.Properties["AspScriptTimeout"][0] = 1800; 140 141 entry.Properties["AspSessionTimeout"][0] = 60; 142 143 entry.CommitChanges(); 144 145 146 147 FileSecurity fSecurity = File.GetAccessControl(targetDir + "App_Data"); 148 149 //string DomainUserName = Environment.UserDomainName + "\\IUSR_" + Environment.MachineName; 150 151 string LocalUserName = Environment.MachineName + "\\IUSR_" + Environment.MachineName; 152 153 string LocalGroupName = Environment.MachineName + "\\IIS_WPG"; 154 155 // Add the FileSystemAccessRule to the security settings. 156 157 try 158 159 { 160 161 fSecurity.AddAccessRule(new FileSystemAccessRule(LocalGroupName, FileSystemRights.FullControl, AccessControlType.Allow)); 162 163 fSecurity.AddAccessRule(new FileSystemAccessRule(LocalUserName, FileSystemRights.FullControl, AccessControlType.Allow)); 164 165 //fSecurity.AddAccessRule(new FileSystemAccessRule(DomainUserName, FileSystemRights.Write, AccessControlType.Allow)); 166 167 // Set the new access settings. 168 169 File.SetAccessControl(targetDir + "App_Data", fSecurity); 170 171 } 172 173 catch 174 175 { 176 177 } 178 179 // Open Application's Web.Config 180 181 Configuration config = WebConfigurationManager.OpenWebConfiguration("/" + targetVDir, friendlySiteName); 182 183 config.AppSettings.Settings["installpath"].Value = targetDir.Substring(0, targetDir.Length - 1); 184 185 config.AppSettings.Settings["DBuser"].Value = login(); 186 187 config.AppSettings.Settings["adminEmail"].Value = Context.Parameters["adminEmail"]; 188 189 config.ConnectionStrings.ConnectionStrings["DBConnectionString"].ConnectionString = connectionString("oDirectv3"); 190 191 config.ConnectionStrings.ConnectionStrings["oDirectConnectionString"].ConnectionString = connectionString("oDirectv3"); 192 193 ((CompilationSection)config.GetSection("system.web/compilation")).Debug = false; 194 195 //save web.config 196 197 config.Save(); 198 199 } 200 201 string connectionString(string db) 202 203 { 204 205 string server = string.Empty; 206 207 if (Context.Parameters["Server"] != string.Empty) 208 209 { 210 211 server += "Data Source=" + Context.Parameters["Server"] + ";Initial Catalog=" + db + ";Persist Security Info=True;" + login(); 212 213 } 214 215 return server; 216 217 } 218 219 string login() 220 221 { 222 223 //User ID=o;Password=abacus 224 225 string login = string.Empty; 226 227 if ((Context.Parameters["Username"] != string.Empty) && (Context.Parameters["Password"] != string.Empty)) 228 229 { 230 231 login += "User ID=" + Context.Parameters["Username"] + ";Password=" + Context.Parameters["Password"]; 232 233 } 234 235 return login; 236 237 } 238 239 public override void Uninstall(IDictionary savedState) 240 241 { 242 243 base.Uninstall(savedState); 244 245 } 246 247 public override void Commit(IDictionary savedState) 248 249 { 250 251 base.Commit(savedState); 252 253 } 254 255 public override void Rollback(IDictionary savedState) 256 257 { 258 259 base.Rollback(savedState); 260 261 } 262 263 } 264
Now am not that familiar with this. now in the Custom action , CustomDataAction Property of the CustomAction, i have wrote the Following parameters
/Targetdir=”[TARGETDIR]\” /TargetVdir=”[TARGETVDIR]\” /targetsite=”[TARGETSITE]\”
After the Installation, the Connectionstring does not get changed . i think that am not submitting all the parameters.
can someone helpo me on this regard
Thank you