Jump to content

The Glimmerman

Member
  • Posts

    144
  • Joined

  • Last visited

  • Donations

    0.00 USD 
  • Country

    Netherlands

Everything posted by The Glimmerman

  1. I know this is a old post but I have the same problem, code to display its progress (%) in text form i.e. "Mounting 3% Complete"). I hate the waiting so I am making my own RT7 Lite clone ( Wim Customizer ). I searched the internet for examples or code for CopyProgressRoutine or WIMMessageCallback but cannot find anything. I hope that some one (post date a year later) can help me out. Maybe you have found the solution Legolash20 and can post it here. For the people interested my wingapi wrapper using System; using System.Runtime.InteropServices; using System.Collections; using System.Globalization; using System.Text; using System.IO; using System.Xml; namespace WIMAPI { public class WimApi { [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public struct _WIM_INFO { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string WimPath; public Guid Guid; public Int32 ImageCount; public Int32 CompressionType; public Int16 PartNumber; public Int16 TotalParts; public Int32 BootIndex; public Int32 WimAttributes; public Int32 WimFlagsAndAttr; } public struct _WIM_MOUNT_LIST { public string WimPath; public string MountPath; public Int64 ImageIndex; public Int64 MountedForRW; } public const uint WIM_DELETE_MOUNTS_ALL = 0x00000001; public const uint WIM_GENERIC_READ = 0X80000000; public const uint WIM_GENERIC_WRITE = 0X40000000; public const int WIM_CREATE_NEW = 1; public const int WIM_CREATE_ALWAYS = 2; public const int WIM_OPEN_EXISTING = 3; public const int WIM_OPEN_ALWAYS = 4; public const int WIM_COMPRESS_NONE = 0; public const int WIM_COMPRESS_XPRESS = 1; public const int WIM_COMPRESS_LZX = 2; public const int WIM_CREATED_NEW = 0; public const int WIM_OPENED_EXISTING = 1; public const int WIM_FLAG_RESERVED = 0x00000001; public const int WIM_FLAG_VERIFY = 0x00000002; public const int WIM_FLAG_INDEX = 0x00000004; public const int WIM_FLAG_NO_APPLY = 0x00000008; public const int WIM_FLAG_NO_DIRACL = 0x00000010; public const int WIM_FLAG_NO_FILEACL = 0x00000020; public const int WIM_FLAG_SHARE_WRITE = 0x00000040; public const int WIM_FLAG_FILEINFO = 0x00000080; public const int WIM_FLAG_NO_RP_FIX = 0x00000100; public const int WIM_REFERENCE_APPEND = 0x00010000; public const int WIM_REFERENCE_REPLACE = 0x00020000; // WIMExportImage public const int WIM_EXPORT_ALLOW_DUPLICATES = 0x00000001; public const int WIM_EXPORT_ONLY_RESOURCES = 0x00000002; public const int WIM_EXPORT_ONLY_METADATA = 0x00000004; // WIMRegisterMessageCallback: public const uint INVALID_CALLBACK_VALUE = 0xFFFFFFFF; public const int WIM_COPY_FILE_RETRY = 0x01000000; public const int COPY_FILE_FAIL_IF_EXISTS = 0x00000001; public const int WM_APP = 0x8000; public const int WIM_MSG = WM_APP + 0x1476; public const int WIM_MSG_TEXT = WM_APP + 0x1477; public const int WIM_MSG_PROGRESS = WM_APP + 0x1478; public const int WIM_MSG_PROCESS = WM_APP + 0x1479; public const int WIM_MSG_SCANNING = WM_APP + 0x147A; public const int WIM_MSG_SETRANGE = WM_APP + 0x147b; public const int WIM_MSG_SETPOS = WM_APP + 0x147c; public const int WIM_MSG_STEPIT = WM_APP + 0x147d; public const int WIM_MSG_COMPRESS = WM_APP + 0x147e; public const int WIM_MSG_ERROR = WM_APP + 0x147f; public const int WIM_MSG_ALIGNMENT = WM_APP + 1480; public const int WIM_MSG_RETRY = WM_APP + 1481; public const int WIM_MSG_SPLIT = WM_APP + 1482; public const int WIM_MSG_FILEINFO = WM_APP + 1483; public const int WIM_MSG_INFO = WM_APP + 1483; public const int WIM_MSG_WARNING = WM_APP + 1484; public const int WIM_MSG_CHK_PROCESS = WM_APP + 1485; public const int WIM_MSG_SUCCESS = 0x0; public const uint WIM_MSG_DONE = 0xFFFFFFF0; public const uint WIM_MSG_SKIP_ERROR = 0xFFFFFFFE; public const uint WIM_MSG_ABORT_IMAGE = 0xFFFFFFFF; public const int WIM_ATTRIBUTE_NORMAL = 0x00000000; public const int WIM_ATTRIBUTE_RESOURCE_ONLY = 0x00000001; public const int WIM_ATTRIBUTE_METADATA_ONLY = 0x00000002; public const int WIM_ATTRIBUTE_VERIFY_DATA = 0x00000004; public const int WIM_ATTRIBUTE_RP_FIX = 0x00000008; public const int WIM_ATTRIBUTE_SPANNED = 0x00000010; public const int WIM_ATTRIBUTE_READONLY = 0x00000020; public const string WIM_XML_NODE_NAME = "NAME"; public const string WIM_XML_NODE_WIM = "WIM"; public const string WIM_XML_NODE_WINDOWS = "WINDOWS"; public const string WIM_XML_NODE_VERSION = "VERSION"; public const string WIM_XML_NODE_MAJOR = "MAJOR"; public const string WIM_XML_NODE_MINOR = "MINOR"; public const string WIM_XML_NODE_BUILD = "BUILD"; public const string WIM_XML_NODE_SPBUILD = "SPBUILD"; /*************************DllImport Attributes ********************************************* * CallingConvention - Specifies the calling convention to use in passing method arguments.* * The default is WinAPI, which corresponds to __stdcall * * for the 32-bit Intel-based platforms. * * EntryPoint - Specifies the DLL entry point to be called. * * SetLastError - Enables the caller to use the Marshal.GetLastWin32Error API * * function to determine whether an error occurred while * * executing the method. In Visual Basic, the default is true; * * in C# and C++, the default is false. * ********************************************************************************************/ // WIMCreateFile - Makes a new image file or opens an existing image file. [DllImport("wimgapi.dll", EntryPoint = "WIMCreateFile", SetLastError = true)] public static extern IntPtr WIMCreateFile( [MarshalAs(UnmanagedType.LPWStr)] string lpszWimPath, UInt32 dwDesiredAccess, Int32 dwCreationDisposition, Int32 dwFlagsAndAttributes, Int32 dwCompressionType, out Int32 lpdwCreationResult ); // WIMApplyImage - Applies an image to a directory path from a Windows image (.wim) file. [DllImport("wimgapi.dll", EntryPoint = "WIMApplyImage", SetLastError = true)] public static extern int WIMApplyImage( IntPtr hImage, [MarshalAs(UnmanagedType.LPWStr)] string lpszPath, Int32 dwApplyFlags ); // WIMCaptureImage - Captures an image from a directory path and stores it in an image file. [DllImport("wimgapi.dll", EntryPoint = "WIMCaptureImage", SetLastError = true)] public static extern IntPtr WIMCaptureImage( IntPtr hWim, [MarshalAs(UnmanagedType.LPWStr)] string lpszPath, Int32 dwApplyFlags ); // WIMCloseHandle - Closes an open Windows Imaging (.wim) file or image handle. [DllImport("wimgapi.dll", EntryPoint = "WIMCloseHandle", SetLastError = true)] public static extern int WIMCloseHandle( IntPtr hObject ); // WIMDeleteImage - Removes an image from within a .wim (Windows image) file // so it cannot be accessed. However, the file resources // are still available for use by the WIMSetReferenceFile function. [DllImport("wimgapi.dll", EntryPoint = "WIMDeleteImage", SetLastError = true)] public static extern int WIMDeleteImage( IntPtr hWim, Int32 dwApplyFlags ); // WIMExportImage - Transfers the data of an image from one Windows image (.wim) // file to another. [DllImport("wimgapi.dll", EntryPoint = "WIMExportImage", SetLastError = true)] public static extern int WIMExportImage( IntPtr hImage, IntPtr hWim, Int32 dwApplyFlags ); // WIMGetAttributes - Returns the information about the .wim file. [DllImport("wimgapi.dll", EntryPoint = "WIMGetAttributes", SetLastError = true)] public static extern int WIMGetAttributes( IntPtr hWim, ref _WIM_INFO lpWimInfo, Int32 cbWimInfo ); // WIMGetImageCount - Returns the number of volume images stored in a Windows image (.wim) file. [DllImport("wimgapi.dll", EntryPoint = "WIMGetImageCount", SetLastError = true)] public static extern Int32 WIMGetImageCount( IntPtr hwim ); // WIMGetMessageCallbackCount - Returns the count of callback routines currently registered by the imaging library. [DllImport("wimgapi.dll", EntryPoint = "WIMGetMessagecallbackCount", SetLastError = true)] public static extern Int32 WIMGetMessagecallbackCount( IntPtr hwim ); // WIMLoadImage - Loads a volume image from a Windows image (.wim) file. [DllImport("wimgapi.dll", EntryPoint = "WIMLoadImage", SetLastError = true)] public static extern IntPtr WIMLoadImage( IntPtr hwim, Int32 dwImageIndex ); // WIMSetBootImage - Marks the image with the given image index as bootable. [DllImport("wimgapi.dll", EntryPoint = "WIMSetBootImage", SetLastError = true)] public static extern int WIMSetBootImage( IntPtr hwim, Int32 dwImageIndex ); // WIMSetReferenceFile - Enables the WIMApplyImage and WIMCaptureImage // functions to use alternate .wim files for file // resources. This can enable optimization of storage // when multiple images are captured with similar data. [DllImport("wimgapi.dll", EntryPoint = "WIMSetReferenceFile", SetLastError = true)] public static extern int WIMSetReferenceFile( IntPtr hwim, [MarshalAs(UnmanagedType.LPWStr)] string lpszPath, Int32 dwFlags ); // WIMSplitFile - Enables a large Windows image (.wim) file to be split // into smaller parts for replication or storage on smaller forms of media. [DllImport("wimgapi.dll", EntryPoint = "WIMSplitFile", SetLastError = true)] public static extern int WIMSplitFile( IntPtr hwim, [MarshalAs(UnmanagedType.LPWStr)] string lpszPartPath, out Int64 pliPartSize, Int32 dwFlags ); // WIMMountImage - Mounts an image in a Windows image (.wim) file to the specified directory. [DllImport("wimgapi.dll", EntryPoint = "WIMMountImage", SetLastError = true)] public static extern bool WIMMountImage( [MarshalAs(UnmanagedType.LPWStr)] string lpszMountPath, [MarshalAs(UnmanagedType.LPWStr)] string lpszWimFileName, Int32 dwImageIndex, [Optional] [MarshalAs(UnmanagedType.LPWStr)] string lpszTempPath ); // WIMUnmountImage - Unmounts a mounted image in a Windows image (.wim) // file from the specified directory. [DllImport("wimgapi.dll", EntryPoint = "WIMUnmountImage", SetLastError = true)] public static extern int WIMUnmountImage( [MarshalAs(UnmanagedType.LPWStr)] string lpszMountPath, [MarshalAs(UnmanagedType.LPWStr)] string lpszWimFileName, Int32 dwImageIndex, int bCommitChanges ); // WIMSetTemporaryPath - Sets the location where temporary imaging files // are to be stored. [DllImport("wimgapi.dll", EntryPoint = "WIMSetTemporaryPath", SetLastError = true)] public static extern int WIMSetTemporaryPath( IntPtr hWim, [MarshalAs(UnmanagedType.LPWStr)] string lpszPath ); // WIMCopyFile - Copies an existing file to a new file. Notifies the // application of its progress through a callback function. // If the source file has verification data, the contents of // the file are verified during the copy operation. [DllImport("wimgapi.dll", EntryPoint = "WIMCopyFile", SetLastError = true)] public static extern int WIMCopyFile( [MarshalAs(UnmanagedType.LPWStr)] string lpszExistingFileName, [MarshalAs(UnmanagedType.LPWStr)] string lpszNewFileName, CopyProgressRoutine lpProgressRoutine, IntPtr lpvData, out Int32 pbCancel, Int32 dwCopyFlags ); // WIMRegisterMessageCallback - Registers a function to be called with imaging-specific data. // For information about the messages that can be handled, // see Messages [DllImport("wimgapi.dll", EntryPoint = "WIMRegisterMessageCallback", SetLastError = true)] public static extern Int32 WIMRegisterMessageCallback( IntPtr hwim, WIMMessageCallback fpMessageProc, IntPtr lpvUserData ); // WIMUnregisterMessageCallback - Unregisters a function from being called with imaging-specific data. [DllImport("wimgapi.dll", EntryPoint = "WIMUnregisterMessageCallback", SetLastError = true)] public static extern long WIMUnregisterMessageCallback( IntPtr hwim, WIMMessageCallback fpMessageProc ); // WIMGetImageInformation - Returns information about an image within the .wim (Windows image) file. [DllImport("wimgapi.dll", EntryPoint = "WIMGetImageInformation", SetLastError = true)] public static extern Int32 WIMGetImageInformation( IntPtr hImage, ref IntPtr lplpvImageInfo, ref Int32 lpcbImageInfo ); [DllImport("kernel32.dll", EntryPoint = "LocalFree", SetLastError = true)] public static extern long LocalFree( IntPtr hMem ); // WIMSetImageInformation - Stores information about an image in the Windows image (.wim) file. [DllImport("wimgapi.dll", EntryPoint = "WIMSetImageInformation", SetLastError = true)] public static extern int WIMSetImageInformation( IntPtr hImage, IntPtr lpvImageInfo, int cbImageInfo ); // WIMDeleteImageMounts - Removes images from all directories where they have been previously mounted. [DllImport("wimgapi.dll", EntryPoint = "WIMDeleteImageMounts", SetLastError = true)] public static extern int WIMDeleteImageMounts( int Flag ); public delegate long CopyProgressRoutine( long TotalFileSize, long TotalBytesTransferred, long StreamSize, long StreamBytesTransferred, Int32 dwStreamNumber, Int32 dwCallbackReason, int hSourceFile, int hDestinationFile, int lpData); // WIMMessageCallback - An application-defined function used with the // WIMRegisterMessageCallback or WIMUnregisterMessageCallback functions. public delegate Int32 WIMMessageCallback( Int32 dwMessageId, Int32 wParam, Int32 lParam, Int32 lpvUserData ); // Get the Name for the given Image in the WIM file // if image not found, returns blank string public static string GetNameForImage(string WimFileName, int ImageIndex) { string strReturn = ""; XmlDocument xmlImageData = new XmlDocument(); IntPtr hWIM; IntPtr XMLInfo = (IntPtr)0; Int32 iLength = 0; Int32 iReturn; int created; hWIM = WIMCreateFile(WimFileName, WIM_GENERIC_READ, WIM_OPEN_EXISTING, WIM_FLAG_VERIFY, WIM_COMPRESS_XPRESS, out created); if (hWIM != null) { iReturn = WIMGetImageInformation(hWIM, ref XMLInfo, ref iLength); if (iReturn != 0) { String XMLStr = Marshal.PtrToStringUni(XMLInfo); String EditedXML = XMLStr.Substring(1); xmlImageData.LoadXml(EditedXML); XmlNode root = xmlImageData.DocumentElement; if (root.Name == WimApi.WIM_XML_NODE_WIM) { XmlNode xmlImage = root.LastChild; int icount = root.ChildNodes.Count; for (int i = 1; i < icount; i++) { if (i == ImageIndex) { int ichild = xmlImage.ChildNodes.Count; if (ichild > 0) { for (int j = 0; j < ichild; j++) { if (xmlImage.ChildNodes[j].Name == (WIM_XML_NODE_NAME)) { strReturn = xmlImage.ChildNodes[j].InnerText; } } } } } } } WIMCloseHandle(hWIM); } return strReturn; } // Get the name for the image, if given the WIM file name and ImageID // If image not found, returns 0 public static int GetIDForImage(string strWimFileName, string Imagename) { int iID = 0; XmlDocument xmlImageData = new XmlDocument(); IntPtr hWIM; IntPtr XMLInfo = (IntPtr)0; Int32 iLength = 0; Int32 iReturn; string strName = Imagename.ToUpper(); int created; hWIM = WIMCreateFile(strWimFileName, WIM_GENERIC_READ, WIM_OPEN_EXISTING, WIM_FLAG_VERIFY, WIM_COMPRESS_XPRESS, out created); if (hWIM != null) { iReturn = WIMGetImageInformation(hWIM, ref XMLInfo, ref iLength); if (iReturn != 0) { String XMLStr = Marshal.PtrToStringUni(XMLInfo); String EditedXML = XMLStr.Substring(1); xmlImageData.LoadXml(EditedXML); XmlNode root = xmlImageData.DocumentElement; if (root.Name == WimApi.WIM_XML_NODE_WIM) { XmlNode xmlImage = root.LastChild; int icount = root.ChildNodes.Count; for (int i = 1; i < icount; i++) { int ichild = xmlImage.ChildNodes.Count; if (ichild > 0) { for (int j = 0; j < ichild; j++) { if (xmlImage.ChildNodes[j].Name == WIM_XML_NODE_NAME) { if (xmlImage.ChildNodes[j].InnerText.ToUpper() == strName) { iID = i; } } } } } } } WIMCloseHandle(hWIM); } return iID; } // Get the list of all Imagenames in the given WIM file // Returns a string in the format n1-name1;n2-name2; etc public static string GetImageNames(string strWimFileName) { string strReturn = ""; XmlDocument xmlImageData = new XmlDocument(); IntPtr hWIM; IntPtr XMLInfo = (IntPtr)0; Int32 iLength = 0; Int32 iReturn; int created; hWIM = WIMCreateFile(strWimFileName, WIM_GENERIC_READ, WIM_OPEN_EXISTING, WIM_FLAG_VERIFY, WIM_COMPRESS_XPRESS, out created); if (hWIM != null) { iReturn = WIMGetImageInformation(hWIM, ref XMLInfo, ref iLength); if (iReturn != 0) { String XMLStr = Marshal.PtrToStringUni(XMLInfo); String EditedXML = XMLStr.Substring(1); xmlImageData.LoadXml(EditedXML); XmlNode root = xmlImageData.DocumentElement; if (root.Name == WimApi.WIM_XML_NODE_WIM) { XmlNode xmlImage = root.LastChild; int icount = root.ChildNodes.Count; for (int i = 1; i < icount; i++) { int ichild = xmlImage.ChildNodes.Count; if (ichild > 0) { for (int j = 0; j < ichild; j++) { if (xmlImage.ChildNodes[j].Name == WIM_XML_NODE_NAME) { //strReturn += i.ToString() + "-"; strReturn += xmlImage.ChildNodes[j].InnerText; strReturn += ";"; } } } } } } WIMCloseHandle(hWIM); } return strReturn; } ///<summary> ///Mounts an image in a .wim file to the specified directory. ///</summary> ///<returns>Returns TRUE and sets the LastError to ERROR_SUCCESS. ///Returns FALSE in case of a failure and the LastError is set to the appropriate Win32 error value. ///</returns> public static void MountImage(string mountPath, string windowsImageFileName, int imageIndex) { bool status = false; int rc; try { status = WIMMountImage(mountPath, windowsImageFileName, imageIndex, System.Environment.GetEnvironmentVariable("temp")); rc = Marshal.GetLastWin32Error(); } catch (System.StackOverflowException) { // //Throw an exception. // throw new System.InvalidOperationException(string.Format(CultureInfo.CurrentCulture, "Unable to mount image {0} to {1}.", windowsImageFileName, mountPath)); } if (status == false) { // //Throw an exception. // throw new System.InvalidOperationException(string.Format(CultureInfo.CurrentCulture, "Unable to mount image {0} to {1}. Error = {2}", windowsImageFileName, mountPath, rc)); } } } // UTILTY Class to get all needed infoirmation about an Image in a WIM file // constructor takes the WIM File name and the image id as parameters // Usually get the image count in the WIM file and instantiate as many CFIWIMImage // objects as per the number of images in the WIM file // IF THE OBJECT IS NOT CONSTRUCTED , iSuccess is set to false. public class WindowsImage { private string m_WimPath; public string WimPath { get { return m_WimPath; } } private int m_ImageID; public int ImageID { get { return m_ImageID; } } private string m_ImageName; public string ImageName { get { return m_ImageName; } } private Int32 m_Major; public Int32 Major { get { return m_Major; } } private Int32 m_Minor; public Int32 Minor { get { return m_Minor; } } private Int32 m_Build; public Int32 Build { get { return m_Build; } } private Int32 m_SPBuild; public Int32 SPBuild { get { return m_SPBuild; } } private bool m_Success; public bool Success { get { return m_Success; } } public WindowsImage(string wimfile, int index) { m_WimPath = wimfile; m_ImageID = index; IntPtr hWim; int created; IntPtr XMLInfo = (IntPtr)0; Int32 iLength = 0; int iReturn; m_Success = false; hWim = WimApi.WIMCreateFile(wimfile, WimApi.WIM_GENERIC_READ, WimApi.WIM_OPEN_EXISTING, WimApi.WIM_FLAG_VERIFY, WimApi.WIM_COMPRESS_XPRESS, out created); if (hWim != null) { iReturn = WimApi.WIMGetImageInformation(hWim, ref XMLInfo, ref iLength); if (iReturn != 0) { XmlDocument xmlImageData = new XmlDocument(); String XMLStr = Marshal.PtrToStringUni(XMLInfo); String EditedXML = XMLStr.Substring(1); xmlImageData.LoadXml(EditedXML); XmlNode root = xmlImageData.DocumentElement; if (root.Name == WimApi.WIM_XML_NODE_WIM) { XmlNode xmlImage = root.LastChild; int icount = root.ChildNodes.Count; for (int i = 1; i < icount; i++) { if (i == index) { m_Success = true; int ichild = xmlImage.ChildNodes.Count; if (ichild > 0) { for (int j = 0; j < ichild; j++) { if (xmlImage.ChildNodes[j].Name == WimApi.WIM_XML_NODE_NAME) { m_ImageName = xmlImage.ChildNodes[j].InnerText; } if (xmlImage.ChildNodes[j].Name == WimApi.WIM_XML_NODE_WINDOWS) { XmlNode xmlWindows = xmlImage.ChildNodes[j]; int iWCount = xmlWindows.ChildNodes.Count; for (int ij = 0; ij < iWCount; ij++) { if (xmlWindows.ChildNodes[ij].Name == WimApi.WIM_XML_NODE_VERSION) { XmlNode xmlVersion = xmlWindows.ChildNodes[ij]; int iVCount = xmlVersion.ChildNodes.Count; for (int k = 0; k < iVCount; k++) { if (xmlVersion.ChildNodes[k].Name == WimApi.WIM_XML_NODE_MAJOR) { m_Major = Convert.ToInt32(xmlVersion.ChildNodes[k].InnerText); } if (xmlVersion.ChildNodes[k].Name == WimApi.WIM_XML_NODE_MINOR) { m_Minor = Convert.ToInt32(xmlVersion.ChildNodes[k].InnerText); } if (xmlVersion.ChildNodes[k].Name == WimApi.WIM_XML_NODE_BUILD) { m_Build = Convert.ToInt32(xmlVersion.ChildNodes[k].InnerText); } if (xmlVersion.ChildNodes[k].Name == WimApi.WIM_XML_NODE_SPBUILD) { m_SPBuild = Convert.ToInt32(xmlVersion.ChildNodes[k].InnerText); } } } } } } } } } } } WimApi.WIMCloseHandle(hWim); } } } }
  2. Hey Guys, I have a issue and now its time to ask for help. I tried everything and it driving me nuts. I used RT Seven Lite for this but, it has a few bugs and it needs an update and because this project is in my opinion abandoned, I stopped using it. So I step over to manual mode. (Read batch mode) A lot we can do manually but what i liked about RT7 is the 'component removal'. Manually adding tweaks, integrate updates and drivers is no problem for the most off us. Enabling and disabling features is no problem at all. But component removal is a pain in the ... Here is my problem. I mount my image. Then I disable and enable my features. Next step I use the wim_tweak to show/unhide all packages. Then I manually remove my packages. For the most packages this is no problem. The package I struggle with is IIS. I want to remove all of IIS but keep NetFX3 But when I remove IIS framework 3.5 is also removed or it breaks framework. I tried Windows 7 Components Remover v0.8 and Windows 7 XML Creator to create the iis.xml and remove it from the image. this results in a error in the image. So my question is: Is there somebody out there who knows how RT Seven Lite removes IIS without breaking netfx3. Or removes IIS without netfx3 by commandline. Thanks in advance
  3. The hidden updates and the updates that are installed on the reference computer can be found in C:\Windows\SoftwareDistribution\DataStore The file u want in your new image on the same location is: datastore.edb.
  4. I have this script that i copy to the startup folder of the default user. Fine tuning may be needed autoit script BlockInput(1) ActionCenterNotifications() _SelfDelete(5) BlockInput(0) Func ActionCenterNotifications() Dim $HoldReg, $HoldProblem, $UnCheckWindowsUpdate, $UnCheckSpyware, $UnCheckInternet, $UnCheckUAC, $UnCheckFirewall, $UnCheckVirus, $UnCheckBackup, $UnCheckCheckUpdates, $UnCheckTroubleshooting $UnCheckWindowsUpdate = 1 $UnCheckSpyware = 0 $UnCheckInternet = 0 $UnCheckUAC = 1 $UnCheckFirewall = 0 $UnCheckVirus = 0 $UnCheckBackup = 1 $UnCheckCheckUpdates = 1 $UnCheckTroubleshooting = 1 If $UnCheckWindowsUpdate+$UnCheckSpyware+$UnCheckInternet+$UnCheckUAC+$UnCheckFirewall+$UnCheckVirus+$UnCheckBackup+$UnCheckCheckUpdates+$UnCheckTroubleshooting <> 0 Then Run("rundll32.exe shell32.dll,Control_RunDLL wscui.cpl") Sleep(5000) Send("+{TAB}") ;shift-tab Send("+{TAB}") Send("+{TAB}") Send("+{TAB}") Send("+{TAB}") Send("+{TAB}") Send("+{TAB}") Send("+{TAB}") Send("{ENTER}") Sleep(500) Send("{TAB}") If $UnCheckWindowsUpdate Then Send("{SPACE}") EndIf Send("{TAB}") If $UnCheckSpyware Then Send("{SPACE}") EndIf Send("{TAB}") If $UnCheckInternet Then Send("{SPACE}") EndIf Send("{TAB}") If $UnCheckUAC Then Send("{SPACE}") EndIf Send("{TAB}") If $UnCheckFirewall Then Send("{SPACE}") EndIf Send("{TAB}") If $UnCheckVirus Then Send("{SPACE}") EndIf Send("{TAB}") If $UnCheckBackup Then Send("{SPACE}") EndIf Send("{TAB}") If $UnCheckCheckUpdates Then Send("{SPACE}") EndIf Send("{TAB}") If $UnCheckTroubleshooting Then Send("{SPACE}") EndIf Send("{TAB}") Send("{TAB}") Send("{TAB}") Send("{TAB}") Sleep(500) Send("{ENTER}") Sleep(500) Send ("!{F4}" );alt-f4 EndIf EndFunc Func _SelfDelete($iDelay = 0) Local $sCmdFile FileDelete(@TempDir & "\deleteme.cmd") $sCmdFile = 'ping -n ' & $iDelay & '127.0.0.1 > nul' & @CRLF _ & ':loop' & @CRLF _ & 'DEL /F /Q "' & @ScriptFullPath & '" > nul' & @CRLF _ & 'if exist "' & @ScriptFullPath & '" goto loop' & @CRLF _ & 'DEL %0' FileWrite(@TempDir & "\deleteme.cmd", $sCmdFile) Run(@TempDir & "\deleteme.cmd", @TempDir, @SW_HIDE) EndFunc
  5. Some additions Get your wifi and IP Settings. ** Not needed when using DHCP ** Use netsh wlan show profiles to show all profiles If you want to see the details of your profiles, use this command: netsh wlan show all export profile netsh wlan export profile folder="PATH_TO_FOLDER" name=PROFILENAME Import profile netsh wlan add profile filename="PATH_AND_FILENAME.xml" Interface="Wireless Network Connection" export all profiles netsh wlan export profile folder="%USERPROFILE%\Desktop" key=clear The key=clear is to get a readable WiFi password Use netsh -c interface dump > c:\ip-settings.txt to save your ip settings. IP gateway DNS etc etc Then in a script @ECHO OFF netsh wlan add profile filename="WiFi-ABC.xml" Interface="Wireless Network Connection" netsh wlan add profile filename="WiFi-XYZ.xml" Interface="Wireless Network Connection" netsh wlan add profile filename="WiFi-SOMEONE.xml" Interface="Wireless Network Connection" netsh wlan add profile filename="WiFi-ERROR-404.xml" Interface="Wireless Network Connection" netsh exec "ip-settings.txt" netsh IP Settings
  6. @Benjiau Nice tutorial. Thanks. But I have Nero 11. And this is not working with nero 11. I followed your tut and I'm installing in the following order Filename: msiexec.exe; Parameters: /i {tmp}\Nero10\corecomponents\Nero.CoreComponents.msi /quiet /norestart Filename: msiexec.exe; Parameters: /i {tmp}\Nero10\controlcenter\Nero.ControlCenter.msi /quiet /norestart Filename: msiexec.exe; Parameters: /i {tmp}\Nero10\burningrom\Nero.BurningROM.msi /quiet /norestart Filename: msiexec.exe; Parameters: /i {tmp}\Nero10\Express\Nero.Express.msi /quiet /norestart Filename: msiexec.exe; Parameters: /i {tmp}\Nero10\coverdesigner\Nero.coverdesigner.msi /quiet /norestart and after installing I can click click and click, but nothing happens. When executing Control Center I get a message that the installation is corrupted. Anyone got any ideas. My goal is to make an Nero Micro installation. thx in advance
  7. The File is called (Auto)unattend.xml Here's some info Windows Deployment Step-by-Step Guide <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" > <Display> <ColorDepth>32</ColorDepth> <HorizontalResolution>1024</HorizontalResolution> <RefreshRate>60</RefreshRate> <VerticalResolution>768</VerticalResolution> </Display> <WindowsFeatures> <ShowWindowsMediaPlayer>false</ShowWindowsMediaPlayer> <ShowMediaCenter>false</ShowMediaCenter> </WindowsFeatures> <BluetoothTaskbarIconEnabled>false</BluetoothTaskbarIconEnabled> <DisableAutoDaylightTimeSet>false</DisableAutoDaylightTimeSet> <RegisteredOrganization>Damage Inc.</RegisteredOrganization> <RegisteredOwner>The Glimmerman</RegisteredOwner> <ShowWindowsLive>false</ShowWindowsLive> <TimeZone>W. Europe Standard Time</TimeZone> <ProductKey>12345-12345-abcde-KLMNO-PQRST</ProductKey> </component>
  8. It seems that I used msiexec /i for all installers except for symantec. I removed the msiexec /i and added it by SEP and it works now. They all install. I have no explaination for this behavior but it works. And for the HKCU thing. I mounted ntuser.dat with the HKCU settings. So all settings are use when using setupcomplete.cmd. So I think. Thx. Guys for the info.
  9. Thanks Guys I'll try msiexec first then if it won't work i will start playing with the order of installing the apps. I let you know how it works out
  10. I have several applications too be installed when setupcomplete.cmd runs. Some of them are msi installers wrapped in a 7z installer. 7-Zip Acrobat Reader X Office 2007 Symantec Endpoint Protection nVidia PhysX software Java But here is the problem. They where installing fine. But some how on a new 7lited windows 7 dvd most of them aren't 7-Zip is installed even nVidia PhysX software but the rest of them starts but will not install. No errors but I must say. They are silent installers so maybe there are errors but I cannot see them. Hope that someone can help me out here. It's driving me Nuts!!
  11. Well, I've tested it and it's the spwizimg.dll in the second image of boot.wim 409 and 411 It must be a bmp 275x174 and must be saved with a alpha channel. (A8 R8 G8 B8) Info
  12. In the root of the dvd in the sources folder there is also an spwizimg.dll file.
  13. HKEY_LOCAL_MACHINE » Software » Policies » Microsoft » Windows » DeviceInstall » Settings AllowRemoteRPC REG DWORD 1 or 0
  14. What policy needs te be set. What I know is for example the policy setting for: Prevent installation of Removable devices GPEdit.msc then go to in Local Computer Policy ->Computer Configuration ->Administrative Templates->System -> Device Installation -> Device Installation Restrictions ->Enable/Disable the "Prevent installation of Removable devices". is the same as HKEY_LOCAL_MACHINE » Software » Policies » Microsoft » Windows » DeviceInstall » Restrictions The keyname will be DenyRemovableDevices value = 1 So I think u should mount the image. Load the registry components from %mount_dir%\windows\system32\config in the registry and add your settings.
  15. It's an old post. I know. But when somebody else got the same problem. You Removed the WLAN AutoConfig service. This service may be set to Automatic by default if the system that Windows 7 was installed upon has an internal wireless card. WLAN AutoConfig, if set to Manual, will not start automatically if you use a hardware switch (such as those on laptops to turn on and off the wireless network card). If you require wireless connectivity on your computer, keep the listed services above on the default values as well as place WLAN AutoConfig into Automatic. If you do not have a wireless card installed on the system, or do not require authentication on your wired network card, the group of services can safely be disabled. Wlansvc=True remove this line.
  16. @bishop No problem, glad to hear it works. Lets hope there wil be a update soon? Does anyone know something about a update (eta) comming soon? (v3.0 RC)
  17. @bishop and voidphoenix There are more bugs in 1.7 ex. Selecting Tweaked registry and change some from disabled to auto (remote desktop services) these changes are not saved in the settings file. Then some services in automatict(delayed) are corrupt. (services\FontCache) When dutch language pack is added. Next time to load rt7 and remove some packages or adding tweaks languagepack lang.ini is removed / changed. Even when adding dutch languagepack lang.ini is generated incorrectly. (must say I use Win7 x64 SP1 integrated) But now The Solution for the firewall rule problem : export the firewall rules of a clean windows 7 install. Use the exported rules in your customized installation. OPTION 1: Custom firewall rule netsh advfirewall firewall add rule name="Remote Desktop (TCP-In)" program=System profile=public,private,domain dir=in localport=3389 protocol=tcp action=allow description="Inbound rule for the Remote Desktop service to allow RDP traffic. [TCP 3389]" OPTION 2: Export original firewall rulez and import netsh advfirewall export "c:\advfirewall.wfw" netsh advfirewall import "c:\advfirewall.wfw" Attachment original firewall rules Windows 7 Ultimate x64 Hope this solves one problem. Glimmerman advFireWall.zip
  18. Probably your right. I always use a clean image when using rt7lite. I have 2 inf files. 1. First one for integrating languagepack/updates/drivers. Then I integrate some other drivers manualy. Because i dont like the way RT7Lite does it. 2. Then the second for removing features. Then I mount it and remove some more stuff add my own modded files and integrate my own tweaks. I know that rt7lite works fine but not the whole 100%. I use viper tweaked services, but some services I set from manual - disabled and the other way arround. disabled to manual. These setings are integrated but not saved in the inf. When mounting for the second time and load the last used inf. The tweaks are over written with the default viper tweaked services. maybe a bug. I don't know. Therefore I manualy add the tweaked services reg from viper and my custom reg file when in the final fase of my unattended windows 7 dvd. So the last things you should do is integrating tweaks and enable/disable features.
  19. Try again, but without BDESVC=True Mcx2Svc=True CscService=True WPCSvc=True wscsvc=True SCardSvr=True SCPolicySvc=True SDRSVC=True WbioSrvc=True idsvc=True WinDefend=True ehRecvr=True ehSched=True WMPNetworkSvc=True And don't use viper tweaked. If this works. Then the problem is with some service u disabled. Then mount again. Enable Viper tweaked -> try again. Then mount again and remove your services -> try again You will have to eliminate stuff where it could be wrong. Last you can try this. In your vm run enablelibraries.reg. Reboot. If this fix the problem you can add this tweak to RT7 I should try this first. Hope it helps. DisableLibariesFeature.zip
  20. I've downloaded GIMP. What a difference compared with photoshop ;P What does the channel thing do? My last question what does a manifest do? I see that in my dll there is 'processorArchitecture="X86"' should i change this in amd64?
  21. Thx Myselfidem, You are the greatest. I'll give it a try. Thx for everything.
  22. I think boot.wim index 1 is windows recovery mode. Only boot.wim index 2 is for windows setup. There is no spwizimg.dll in index 1. The attachment is from my boot.wim I also have a other with a custom image (516) This one is not white, but transparent. I got it from Rockers Team - Windows 7 Fire from bensam56. I don't know how he did it, but if I cannot get this to work I'll be using his dll for the time being. If u want I can upload it. I'll download your file and will build a new image from scratch. I'll let you know how it works out. Thx spwizimg.7z
  23. I'm using restorator 2007. I tried it even backwards. Got a dutch x64 windows 7. Integrated the english languagepack with RT7Lite 1.50. Loaded in vmware and not working. I get the vista/seven setup look. (this is source 516 - spwizimg.dll) After inspecting my %DVD% I saw a simple no use autounattend.xml generated by RT7lite. By removing this file, I get the classic look. <?xml version="1.0" encoding="utf-8"?> <!--This answer file generated by RT Seven Lite--> <unattend xmlns="urn:schemas-microsoft-com:unattend"> <settings pass="windowsPE"> <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="NonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" /> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="NonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" /> </settings> <settings pass="specialize" /> </unattend> This also works with a english windows 7 with dutch languagepack installed. But when adding an autounattend.xml it's not working. I get the vista/seven look. I cannot understand why a autounattend.xml causes setup to use source 516 from spwizimg.dll and without not. I must say I only have 517 and 518 changed in spwizimg.dll Do you have source 516 changed? Regards.
  24. What did you mean by this. What folder need to be copied and deleted. Without an unattended.xml it is working. I get the 'classic' setup with my custom background. But with an autounattend.xml I get this.
×
×
  • Create New...