安装程序安装程序信息安装时出错1001错误 [英] setup installer information Error 1001 error while installing

查看:146
本文介绍了安装程序安装程序信息安装时出错1001错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

亲爱的所有人,



我在dotnet 3.5中构建了activex它在我的系统中运行但是如果我安装在带有dotnet框架的客户端系统中3.5安装程序会给出错误1001但是如果我使用框架4.0安装安装它可以工作。



我想让我的设置与dotnet 3.5一起工作。

请帮我解决这个问题问题



头等舱

Dear All,

I have built activex in dotnet 3.5 it works in my system but if i install in client system with dotnet framework 3.5 setup gives error 1001 but if i install setup with framework 4.0 it works.

I want to make my setup work with dotnet 3.5.
Kindly help me resolve this issue

First Class

using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;

namespace AdsActiveX_2_0
{
    [ProgId("Ads")]
    [ClassInterface(ClassInterfaceType.AutoDual), ComSourceInterfaces(typeof(ControlEvents))] //Implementing interface that will be visible from JS
    [Guid("B93FE1A0-2AA3-47E4-BF24-D53D6B75C6ED")]
    [ComVisible(true)]
    public class AdstringoCS : IObjectSafetyImpl
    {
        private string myParam = "Empty";

        public AdstringoCS()
        {

        }

        [ComVisible(true)]
        public string MyParam
        {
            get
            {
                return myParam;
            }
            set
            {
                myParam = value;
            }
        }

        [ComVisible(true)]
        public void Open()
        {
            //TODO: Replace the try catch in aspx with try catch below. The problem is that js OnClose does not register.
            try
            {

                MessageBox.Show(myParam); //Show param that was passed from JS
                //Thread.Sleep(2000); //Wait a little before closing. This is just to show the gap between calling OnClose event.
                //Close(); //Close application

            }
            catch (Exception e)
            {
                //ExceptionHandling.AppException(e);
                throw e;
            }
        }

        public event ControlEventHandler OnClose;

        [ComRegisterFunction()]
		public static void RegisterClass ( string key )
		{
            try
            {
                // Strip off HKEY_CLASSES_ROOT\ from the passed key as I don't need it
                StringBuilder sb = new StringBuilder(key);

                sb.Replace(@"HKEY_CLASSES_ROOT\", "");
                // Open the CLSID\{guid} key for write access
                RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(), true);

                // And create	the	'Control' key -	this allows	it to show up in
                // the ActiveX control container
                RegistryKey ctrl = k.CreateSubKey("Control");
                ctrl.Close();

                // Next create the CodeBase entry	- needed if	not	string named and GACced.
                RegistryKey inprocServer32 = k.OpenSubKey("InprocServer32", true);
                inprocServer32.SetValue("CodeBase", Assembly.GetExecutingAssembly().CodeBase);
                inprocServer32.Close();
                // Finally close the main	key
                //    MessageBox.Show("Registered Successfully");
                k.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
		}

		///	<summary>
		///	Called to unregister the control
		///	</summary>
		///	<param name="key">Tke registry key</param>
		[ComUnregisterFunction()]
		public static void UnregisterClass ( string	key	)
		{
			StringBuilder	sb = new StringBuilder ( key ) ;
			sb.Replace(@"HKEY_CLASSES_ROOT\","") ;

			// Open	HKCR\CLSID\{guid} for write	access
			RegistryKey	k =	Registry.ClassesRoot.OpenSubKey(sb.ToString(),true);

			// Delete the 'Control'	key, but don't throw an	exception if it	does not exist
			k.DeleteSubKey ( "Control" , false ) ;

			// Next	open up	InprocServer32
			//RegistryKey	inprocServer32 = 
			k.OpenSubKey (	"InprocServer32" , true	) ;

			// And delete the CodeBase key,	again not throwing if missing
			k.DeleteSubKey ( "CodeBase"	, false	) ;
          //  MessageBox.Show("Unregistered Successfully");
			// Finally close the main key
			k.Close	( )	;
		}

	}

	/// <summary>
	/// Event handler for events that will be visible from JavaScript
	/// </summary>
	public delegate void ControlEventHandler(string redirectUrl); 

	/// <summary>
	/// This interface shows events to javascript
	/// </summary>
	[Guid("68BD4E0D-D7BC-4cf6-BEB7-CAB950161E79")]
	[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
	public interface ControlEvents
	{
		//Add a DispIdAttribute to any members in the source interface to specify the COM DispId.
		[DispId(0x60020001)]
		void OnClose(string redirectUrl); //This method will be visible from JS
	}
}







第二类






Second Class

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.Text;

[ComImport, GuidAttribute("CB5BDC81-93C1-11CF-8F20-00805F2CD064")]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
public interface IObjectSafety
{
    [PreserveSig]
    int GetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] ref int pdwSupportedOptions, [MarshalAs(UnmanagedType.U4)] ref int pdwEnabledOptions);

    [PreserveSig()]
    int SetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] int dwOptionSetMask, [MarshalAs(UnmanagedType.U4)] int dwEnabledOptions);
}
public class IObjectSafetyImpl : IObjectSafety
{
    private const string _IID_IDispatch = "{00020400-0000-0000-C000-000000000046}";
    private const string _IID_IDispatchEx = "{a6ef9860-c720-11d0-9337-00a0c90dcaa9}";
    private const string _IID_IPersistStorage = "{0000010A-0000-0000-C000-000000000046}";
    private const string _IID_IPersistStream = "{00000109-0000-0000-C000-000000000046}";
    private const string _IID_IPersistPropertyBag = "{37D84F60-42CB-11CE-8135-00AA004BB851}";

    private const int INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001;
    private const int INTERFACESAFE_FOR_UNTRUSTED_DATA = 0x00000002;
    private const int _OK = 0;
    private const int _FAIL = unchecked((int)0x80004005);
    private const int _NOINTERFACE = unchecked((int)0x80004002);

    private bool _fSafeForScripting = true;
    private bool _fSafeForInitializing = true;

    public int GetInterfaceSafetyOptions(ref Guid riid, ref int pdwSupportedOptions, ref int pdwEnabledOptions)
    {
        int Result = _FAIL;

        string strGUID = riid.ToString("B");
        pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA;
        switch (strGUID)
        {
            case _IID_IDispatch:
            case _IID_IDispatchEx:
                Result = _OK;
                pdwEnabledOptions = 0;
                if (_fSafeForScripting == true)
                    pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER;
                break;
            case _IID_IPersistStorage:
            case _IID_IPersistStream:
            case _IID_IPersistPropertyBag:
                Result = _OK;
                pdwEnabledOptions = 0;
                if (_fSafeForInitializing == true)
                    pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA;
                break;
            default:
                Result = _NOINTERFACE;
                break;
        }

        return Result;
    }

    public int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions)
    {
        int Result = _FAIL;

        string strGUID = riid.ToString("B");
        switch (strGUID)
        {
            case _IID_IDispatch:
            case _IID_IDispatchEx:
                if (((dwEnabledOptions & dwOptionSetMask) == INTERFACESAFE_FOR_UNTRUSTED_CALLER) &&
                     (_fSafeForScripting == true))
                    Result = _OK;
                break;
            case _IID_IPersistStorage:
            case _IID_IPersistStream:
            case _IID_IPersistPropertyBag:
                if (((dwEnabledOptions & dwOptionSetMask) == INTERFACESAFE_FOR_UNTRUSTED_DATA) &&
                     (_fSafeForInitializing == true))
                    Result = _OK;
                break;
            default:
                Result = _NOINTERFACE;
                break;
        }

        return Result;
    }
}

推荐答案

我得到了答案。

要降级activex我们必须在installshield中设置.net版本。

要做到这一点,我们需要转到Tools-Options-> .net - >将regasm.exe位置更改为.net 2.0 root。
I got answer for this.
To downgrade activex we have to set .net version in installshield.
To do this we need to go to Tools-Options-> .net -> Change regasm.exe location to .net 2.0 root.


这篇关于安装程序安装程序信息安装时出错1001错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆