c# - Microsoft.Windows.ActCtx en Windows Xp
javascript vbscript (2)
Si Microsoft.Windows.ActCtx fuera redistribuible, tendría que haber alguna forma de que ingresara en la máquina y se registrara globalmente. Si tuvo acceso para registrar esto en la máquina, ¿no puede inscribirse simplemente registrar Application.Interface? Si se trata de un entorno restringido ... bueno, debe lidiar con lo que ya está disponible.
Parece que está usando el script wsh para iniciar su aplicación. ¿Por qué no escribir un código auxiliar para iniciar la aplicación en código nativo o administrado (donde podrá usar un manifiesto) y llamar a ese código auxiliar en su lugar?
Estos días estoy muy ocupado desarrollando una aplicación activex / com. Algunos de nuestros clientes están trabajando en entornos de Windows muy restringidos. Entonces decidí hacer que mi aplicación quedara libre. Encontré genman32.exe que puede crear fácilmente manifiestos (también mt.exe es útil). Todo fue bien pero cuando traté de ejecutar mi aplicación desde wsh (vbs o js) -que está obligada para mi situación porque la aplicación funciona en un servidor de servidor-
set o = CreateObject("Application.Interface")
// No object reference
Debido a que "CreateObject" mira al registro y no hay registro de entrada :) luego busqué y encontré lo que es "actctx". Es muy fácil de implementar en un entorno dot.net. Pero debo ejecutar mi aplicación desde wsh (vbs o js);) así que decidí buscar un poco y luego encontré
set o = CreateObject("Microsoft.Windows.ActCtx")
o.manifest = "L://Application.dll.manifest"
set app = o.CreateObject("Application.Interface")
app.Launch() // which is my executing function
Problema: la interfaz "Microsoft.Windows.ActCtx" no está disponible en las máquinas con Windows Xp ni siquiera en SP3. Microsoft nunca lo permite. ¿Hay alguna solución a ese problema? ¿Conoces algún otro método o actualización de Windows que cree esa interfaz?
Descubrí el problema con mi manifiesto. Lo compartiré con cualquier otra persona que se haya topado con un problema similar.
Tenga en cuenta que DEBE especificar la propiedad progid = "" en su manifiesto al usar esto con la interfaz "Microsoft.Windows.ActCtx", de lo contrario obtendrá el error ActiveX Component Can not Create Object.
<comClass
clsid="{ED59F192-EF2E-4BCC-95EB-85A8C5C65326}"
progid="myclass.process"
threadingModel = "Apartment" />
El siguiente ejemplo de manifiesto debería ponerlo en funcionamiento :)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
type="win32"
name="myclass"
version="1.0.0.0"/>
<file name = "myclass.dll">
<comClass
clsid="{ED59F192-EF2E-4BCC-95EB-85A8C5C65326}"
progid="myclass.process"
threadingModel = "Apartment" />
<typelib tlbid="{7AE20C3A-48C2-42C1-A68D-A1C3EB0A2C65}"
version="1.0" helpdir=""/>
</file>
<comInterfaceExternalProxyStub
name="_PROCESS"
iid="{187D0811-470D-44C0-B68C-C1C7F3EEFDA0}"
proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"
baseInterface="{00000000-0000-0000-C000-000000000046}"
tlbid = "{7AE20C3A-48C2-42C1-A68D-A1C3EB0A2C65}" />
</assembly>