public InterfaceConfigCallback(ICatalogCollection coll, Type t, Hashtable cache, RegistrationDriver driver) { this._type = t; this._coll = coll; this._cache = cache; this._driver = driver; this._ifcs = this.GetInteropInterfaces(this._type); foreach (Type type in this._ifcs) { if (Marshal.GenerateGuidForType(type) == IID_IProcessInitializer) { try { ICatalogObject obj2 = cache["Component"] as ICatalogObject; ICatalogCollection catalogs = cache["ComponentCollection"] as ICatalogCollection; obj2.SetValue("InitializesServerApplication", 1); catalogs.SaveChanges(); } catch (Exception exception) { if ((exception is NullReferenceException) || (exception is SEHException)) { throw; } throw new RegistrationException(Resource.FormatString("Reg_FailPIT", this._type), exception); } } } RegistrationDriver.Populate(this._coll); }
public InterfaceConfigCallback(ICatalogCollection coll, Type t, Hashtable cache, RegistrationDriver driver) { _type = t; _coll = coll; _cache = cache; _driver = driver; // TODO: Populate w/ QueryByKey // TODO: Build cache for FindObject() _ifcs = GetInteropInterfaces(_type); // Check to see if one of the interfaces is IProcessInitializer foreach (Type ifc in _ifcs) { if (Marshal.GenerateGuidForType(ifc) == IID_IProcessInitializer) { DBG.Info(DBG.Registration, "Setting component " + cache["ComponentType"] + " up as process initializer"); try { ICatalogObject comp = cache["Component"] as ICatalogObject; ICatalogCollection compColl = cache["ComponentCollection"] as ICatalogCollection; comp.SetValue("InitializesServerApplication", 1); compColl.SaveChanges(); } catch (Exception e) { throw new RegistrationException(Resource.FormatString("Reg_FailPIT", _type), e); } } } RegistrationDriver.Populate(_coll); }
public InterfaceConfigCallback(ICatalogCollection coll, Type t, Hashtable cache, RegistrationDriver driver) { this._type = t; this._coll = coll; this._cache = cache; this._driver = driver; this._ifcs = this.GetInteropInterfaces(this._type); foreach (Type type in this._ifcs) { if (Marshal.GenerateGuidForType(type) == IID_IProcessInitializer) { try { ICatalogObject obj2 = cache["Component"] as ICatalogObject; ICatalogCollection catalogs = cache["ComponentCollection"] as ICatalogCollection; obj2.SetValue("InitializesServerApplication", 1); catalogs.SaveChanges(); } catch (Exception exception) { if ((exception is NullReferenceException) || (exception is SEHException)) { throw; } throw new RegistrationException(Resource.FormatString("Reg_FailPIT", this._type), exception); } } } RegistrationDriver.Populate(this._coll); }
public ComponentConfigCallback(ICatalogCollection coll, ApplicationSpec spec, Hashtable cache, RegistrationDriver driver, InstallationFlags installFlags) { this._spec = spec; this._coll = coll; this._cache = cache; this._driver = driver; this._installFlags = installFlags; RegistrationDriver.Populate(coll); }
public ComponentConfigCallback(ICatalogCollection coll, ApplicationSpec spec, Hashtable cache, RegistrationDriver driver, InstallationFlags installFlags) { this._spec = spec; this._coll = coll; this._cache = cache; this._driver = driver; this._installFlags = installFlags; RegistrationDriver.Populate(coll); }
public object ResolveRef(Assembly asm) { string str2 = Path.Combine(Path.GetDirectoryName(asm.Location), asm.GetName().Name) + ".tlb"; if (this._report != null) { this._report(Resource.FormatString("Reg_AutoExportMsg", asm.FullName, str2)); } return((ITypeLib)RegistrationDriver.GenerateTypeLibrary(asm, str2, this._report)); }
public ComponentConfigCallback(ICatalogCollection coll, ApplicationSpec spec, Hashtable cache, RegistrationDriver driver, InstallationFlags installFlags) { _spec = spec; _coll = coll; _cache = cache; _driver = driver; _installFlags = installFlags; // TODO: Populate w/ QueryByKey // TODO: Cache for FindObject RegistrationDriver.Populate(coll); }
private static ICatalogObject FindComponent(ICatalogCollection coll, Guid clsid, ref int idx) { RegistrationDriver.Populate(coll); int num = coll.Count(); for (int i = 0; i < num; i++) { ICatalogObject obj2 = (ICatalogObject)coll.Item(i); Guid guid = new Guid((string)obj2.GetValue("CLSID")); if (guid == clsid) { idx = i; return(obj2); } } return(null); }
private static ICatalogObject FindComponent(ICatalogCollection coll, Guid clsid, ref int idx) { RegistrationDriver.Populate(coll); int count = coll.Count(); for (int i = 0; i < count; i++) { ICatalogObject obj = (ICatalogObject)(coll.Item(i)); Guid objid = new Guid((String)(obj.GetValue("CLSID"))); if (objid == clsid) { idx = i; return(obj); } } return(null); }
public MethodConfigCallback(ICatalogCollection coll, Type t, Type impl, Hashtable cache, RegistrationDriver driver) { this._type = t; this._impl = impl; this._coll = coll; this._cache = cache; this._driver = driver; if (this._type.IsInterface) { this._map = this._impl.GetInterfaceMap(this._type); } else { this._map.InterfaceMethods = null; this._map.InterfaceType = null; this._map.TargetMethods = null; this._map.TargetType = null; } RegistrationDriver.Populate(coll); }
public MethodConfigCallback(ICatalogCollection coll, Type t, Type impl, Hashtable cache, RegistrationDriver driver) { this._type = t; this._impl = impl; this._coll = coll; this._cache = cache; this._driver = driver; if (this._type.IsInterface) { this._map = this._impl.GetInterfaceMap(this._type); } else { this._map.InterfaceMethods = null; this._map.InterfaceType = null; this._map.TargetMethods = null; this._map.TargetType = null; } RegistrationDriver.Populate(coll); }
/// <include file='doc\RegistrationWrappers.uex' path='docs/doc[@for="RegistrationHelper.InstallAssemblyFromConfig"]/*' /> public void InstallAssemblyFromConfig([MarshalAs(UnmanagedType.IUnknown)] ref RegistrationConfig regConfig) { // Create a permission object for unmanaged code SecurityPermission sp = new SecurityPermission(SecurityPermissionFlag.UnmanagedCode); // demand that the caller have this permission sp.Demand(); // now that the caller is clean, assert it from now on. sp.Assert(); Platform.Assert(Platform.W2K, "RegistrationHelper.InstallAssemblyFromConfig"); if (Thread.CurrentThread.ApartmentState == ApartmentState.STA) { // HACK: In order to reduce deadlock likelihood, we need to get off // the current STA (into an MTA) in order to do this work. // Whip off a new thread... RegistrationThreadWrapper wrap = new RegistrationThreadWrapper(this, regConfig); Thread t = new Thread(new ThreadStart(wrap.InstallThread)); t.Start(); t.Join(); wrap.PropInstallResult(); } else { // First, try to do this in a "transacted" manner. This will // return false if we couldn't start up the transaction, // true if it succeeded. // We only do the transacted install if we're on win2k or higher, // cause MTS is all in the registry. if (Platform.IsLessThan(Platform.W2K) || !TryTransactedInstall(regConfig)) { // We need to try a non-transacted install: DBG.Info(DBG.Registration, "Failed to do a transacted install. Using non-tx install."); RegistrationDriver helper = new RegistrationDriver(); helper.InstallAssembly(regConfig, null); } } }
public MethodConfigCallback(ICatalogCollection coll, Type t, Type impl, Hashtable cache, RegistrationDriver driver) { _type = t; // The "interface" we have methods for _impl = impl; // The implementation of the interface: _coll = coll; _cache = cache; _driver = driver; try { _map = _impl.GetInterfaceMap(_type); } catch (System.ArgumentException) { _map.InterfaceMethods = null; _map.InterfaceType = null; _map.TargetMethods = null; _map.TargetType = null; } RegistrationDriver.Populate(coll); }
/// <include file='doc\RegistrationWrappers.uex' path='docs/doc[@for="RegistrationHelperTx.UninstallAssemblyFromConfig"]/*' /> public void UninstallAssemblyFromConfig([MarshalAs(UnmanagedType.IUnknown)] ref RegistrationConfig regConfig, Object sync) { bool succeed = false; try { DBG.Assert(ContextUtil.IsInTransaction, "Running in transactional helper w/o transaction will deadlock!"); RegistrationDriver helper = new RegistrationDriver(); helper.UninstallAssembly(regConfig, sync); ContextUtil.SetComplete(); succeed = true; } finally { if (!succeed) { DBG.Info(DBG.Registration, "Uninstall failed."); ContextUtil.SetAbort(); } } }
internal static void UninstallUtilityApplication(Type t) { DBG.Info(DBG.Registration, "Starting utility uninstallation:"); try { if (Platform.IsLessThan(Platform.W2K)) { return; } ICatalog cat = null; ICatalogCollection apps = null; ICatalogObject app = null; int appidx = 0; cat = (ICatalog)(new xCatalog()); if (!Platform.IsLessThan(Platform.Whistler)) { // AS/URT 97116: Keep this from failing the install if // we're on a Beta2 Whistler machine, which has a different // GUID for ICatalog2. ICatalog2 cat2 = cat as ICatalog2; if (cat2 != null) { cat2.CurrentPartition(cat2.GlobalPartitionID()); } } apps = (ICatalogCollection)(cat.GetCollection("Applications")); RegistrationDriver.Populate(apps); app = FindApplication(apps, _appid, ref appidx); if (app != null) { // Make sure that we can change this puppy: app.SetValue("Changeable", true); app.SetValue("Deleteable", true); apps.SaveChanges(); DBG.Info(DBG.Registration, "Found application!"); int idx = 0, compcount = 0; Guid clsid = Marshal.GenerateGuidForType(typeof(RegistrationHelperTx)); ICatalogCollection comps = (ICatalogCollection)(apps.GetCollection("Components", app.Key())); ICatalogObject comp = FindComponent(comps, clsid, ref idx); // Store count here, if it is 1, we can delete the app later. compcount = comps.Count(); if (comp != null) { DBG.Info(DBG.Registration, "Found component at " + idx); comps.Remove(idx); comps.SaveChanges(); } if (comp != null && compcount == 1) { DBG.Info(DBG.Registration, "Removing .NET Utilities application."); // we removed the last component, kill the app apps.Remove(appidx); apps.SaveChanges(); } else { // Make sure that we can't change the app: app.SetValue("Changeable", false); app.SetValue("Deleteable", false); apps.SaveChanges(); } } } catch (Exception e) { // Log a failure in some acceptable manner. try { EventLog appLog = new EventLog(); appLog.Source = "System.EnterpriseServices"; String errMsg = String.Format(Resource.FormatString("Reg_ErrUninstSysEnt"), e); appLog.WriteEntry(errMsg, EventLogEntryType.Error); } catch {} // We threw an exception? What do we do here? //DBG.Assert(false, // "Installation of System.EnterpriseServices threw an exception!", // "Exception: " + e); DBG.Info(DBG.Registration, "Caught exception: " + e); } }
internal static void InstallUtilityApplication(Type t) { DBG.Info(DBG.Registration, "Starting utility installation:"); try { if (Platform.IsLessThan(Platform.W2K)) { return; } ICatalog cat = null; ICatalogCollection apps = null; ICatalogObject app = null; int junk = 0; cat = (ICatalog)(new xCatalog()); if (!Platform.IsLessThan(Platform.Whistler)) { // AS/URT 97116: Keep this from failing the install if // we're on a Beta2 Whistler machine, which has a different // GUID for ICatalog2. ICatalog2 cat2 = cat as ICatalog2; if (cat2 != null) { cat2.CurrentPartition(cat2.GlobalPartitionID()); } } apps = (ICatalogCollection)(cat.GetCollection("Applications")); RegistrationDriver.Populate(apps); app = FindApplication(apps, _appid, ref junk); if (app == null) { DBG.Info(DBG.Registration, "Didn't find existing application..."); app = (ICatalogObject)(apps.Add()); app.SetValue("Name", _appname); app.SetValue("Activation", ActivationOption.Library); app.SetValue("ID", "{" + _appid.ToString() + "}"); if (!Platform.IsLessThan(Platform.Whistler)) { // AS/URT 97116: Keep this from failing the install if // we're on a Beta2 Whistler machine, which has no Replicable property. try { app.SetValue("Replicable", 0); } catch (Exception) {} } apps.SaveChanges(); } else { // Make sure that we can change this puppy: app.SetValue("Changeable", true); app.SetValue("Deleteable", true); apps.SaveChanges(); app.SetValue("Name", _appname); if (!Platform.IsLessThan(Platform.Whistler)) { // AS/URT 97116: Keep this from failing the install if // we're on a Beta2 Whistler machine, which has no Replicable property. try { app.SetValue("Replicable", 0); } catch (Exception) {} } apps.SaveChanges(); } // Import ourselves into the application: Guid clsid = Marshal.GenerateGuidForType(typeof(RegistrationHelperTx)); ICatalogCollection comps = (ICatalogCollection)(apps.GetCollection("Components", app.Key())); ICatalogObject comp = FindComponent(comps, clsid, ref junk); if (comp == null) { cat.ImportComponent("{" + _appid + "}", "{" + clsid + "}"); comps = (ICatalogCollection)(apps.GetCollection("Components", app.Key())); comp = FindComponent(comps, clsid, ref junk); } DBG.Assert(comp != null, "Couldn't find imported component!"); ConfigureComponent(comps, comp); // And finally, lock this guy down: app.SetValue("Changeable", false); app.SetValue("Deleteable", false); apps.SaveChanges(); DBG.Info(DBG.Registration, "Registering Proxy/Stub dlls:"); Thunk.Proxy.RegisterProxyStub(); // HACK // This is a HACK to get Windows XP Client COM+ export/import functionallity to work. // Export code will try to export System.EnterpriseServices.Thunk.dll because its not in it's // list of non-redist dlls. // We should get rid of this once this name is in the harcoded list in the export code. RegistryPermission rp = new RegistryPermission(PermissionState.Unrestricted); rp.Demand(); rp.Assert(); RegistryKey rk = Registry.LocalMachine.CreateSubKey("SOFTWARE\\MICROSOFT\\OLE\\NONREDIST"); rk.SetValue("System.EnterpriseServices.Thunk.dll", ""); rk.Close(); // END HACK } catch (Exception e) { // Log a failure in some acceptable manner. try { EventLog appLog = new EventLog(); appLog.Source = "System.EnterpriseServices"; String errMsg = String.Format(Resource.FormatString("Reg_ErrInstSysEnt"), e); appLog.WriteEntry(errMsg, EventLogEntryType.Error); } catch {} // We threw an exception? What do we do here? //DBG.Assert(false, // "Installation of System.EnterpriseServices threw an exception!", // "Exception: " + e); } }