|
|
/*++
Copyright (c) 2000 Microsoft Corporation
Abstract: create the assembly directory name with input as a manifest file Author: Xiaoyu Wu(xiaoyuw) 01-Aug-2001
--*/ #include "windows.h"
#include "stdio.h"
#include "sxsapi.h"
EXTERN_C BOOL FusionpInitializeHeap(HINSTANCE hInstance); extern BOOL SxspInitActCtxContributors(); extern BOOL SxspGenerateManifestPathOnAssemblyIdentity(PCWSTR str, PWSTR pszOut, ULONG *pCchstr, PASSEMBLY_IDENTITY *ppAssemblyIdentity);
void PrintUsage(PCWSTR exename) { fprintf(stderr, "Generate Directory name under winsxs for assembly.\n\n"); fprintf(stderr, "%S [-ManifestToAsmDir manifest_filename] [-ManifestToAsmID manifest_filename] [-AsmIdToAsmDir Textual_Assembly_Identity_string]\n");
return; }
BOOL GetAsmDir_Initialize() { if (!FusionpInitializeHeap(NULL)){ fprintf(stderr,"fusion heap could not be initialized\n"); return FALSE; }
if (!SxspInitActCtxContributors()) { fprintf(stderr,"Sxs ActCtxContributors could not be initialized\n"); return FALSE; }
return TRUE; }
#define GET_ASSEMBLY_DIR_FROM_MANIFEST 1
#define GET_ASSEMBLY_IDENTITY_FROM_MANIFEST 2
#define Get_ASSEMBLY_DIR_FROM_TEXTUAL_ASSEMBLY_IDENTITY 3
extern "C" { void (__cdecl * _aexit_rtn)(int); } extern "C" int __cdecl wmain(int argc, wchar_t** argv) {
DWORD op = 0;
//
// check the parameters
//
if (argc != 3) { PrintUsage(argv[0]); return 1; }
if (_wcsicmp(argv[1], L"-ManifestToAsmDir") == 0) { op = GET_ASSEMBLY_DIR_FROM_MANIFEST; } else if (_wcsicmp(argv[1], L"-ManifestToAsmID") == 0) { op = GET_ASSEMBLY_IDENTITY_FROM_MANIFEST; } else if (_wcsicmp(argv[1], L"-AsmIDToAsmDir") == 0) { op = Get_ASSEMBLY_DIR_FROM_TEXTUAL_ASSEMBLY_IDENTITY; }else { PrintUsage(argv[0]); return 1; }
if (GetAsmDir_Initialize() == FALSE) return 1;
if ((op == GET_ASSEMBLY_DIR_FROM_MANIFEST) || (op == GET_ASSEMBLY_IDENTITY_FROM_MANIFEST)) { struct { SXS_MANIFEST_INFORMATION_BASIC mib; WCHAR buf1[1024]; } buff;
if ( GetFileAttributesW(argv[2]) == (DWORD) (-1)) { fprintf(stderr, " the manifest %S could not be found with current PATH setting\n", argv[2]); return 1; } if (!SxsQueryManifestInformation(0, argv[2], SXS_QUERY_MANIFEST_INFORMATION_INFOCLASS_BASIC, 0, sizeof(buff), &buff, NULL)) { fprintf(stderr, "SxsQueryManifestInformation failed.\n"); return 1; } else { if (op == GET_ASSEMBLY_DIR_FROM_MANIFEST) fprintf(stdout, "%S", buff.mib.lpShortName); else if (op == GET_ASSEMBLY_IDENTITY_FROM_MANIFEST) fprintf(stdout, "%S", buff.mib.lpIdentity);
return 0; } }else if (op == Get_ASSEMBLY_DIR_FROM_TEXTUAL_ASSEMBLY_IDENTITY) { WCHAR buf[1024]; ULONG ulBufSize = 1024;
if (! SxspGenerateManifestPathOnAssemblyIdentity(argv[2], buf, &ulBufSize, NULL)) { fprintf(stderr, "SxspGenerateManifestPathOnAssemblyIdentity failed.\n"); return 1; } else { fprintf(stdout, "%S", buf); return 0; } }
return 1; // failed case
}
|