It appears that this version…has just been upgraded

Product Compare Forums Multi-Edit Support It appears that this version…has just been upgraded

Viewing 5 posts - 1 through 5 (of 5 total)
  • Author
  • #1425

    I am running MEW 9.0e, as I have been for quite some time- I used it just yesterday. Today when I started it, it gave the above message and asked if I wanted to update the configuration. Now, all of my customizations are gone. There’s not even a project menu.

    1) Why did it think that it was just upgraded?

    2) What can I do about it?


    Not sure what exactly might have happened there but it sounds like your config subdirectory or just your MeConfig.db and Wcmdmap.db might have been corrupted for whatever reason. In that same directory should be some .BAK files corresponding to those .DB files. You may be able to rename the new .DB files and rename the .BAK files to .DB files and try that out. But, you may want to make copies of those .BAK files before you do so.


    Platform / Version: WinXP / ME 9.10.03

    I have had the same thing happen to me several times in the past — extremely frustrating.

    The above suggestions failed to recover my configuration.

    I can’t seem to offer anything useful — it always catches me by suprise. I’ve been running multiple instances of multiedit with different sessions; I often see the same file conflict error that others have reported. I guess this time the conflict was fatal. All of my sessions are lost. All of my source control paths are lost. I suppose I’ve learned my lesson: multiedit is not reliable when running multiple instances. One must occasionally backup the config directory.


    Running multiple instances off the same executable can be problematic as they DO have to share the same configurations and that is where you will get into trouble. If you run multiple instances of Multi-Edit that are truly separate installations in different directories with their own config files, you should not have a problem. I generally run four different incarnations of ME in this manner without problems, sometimes more than that but all in their own separate directories.

    Hope that information helps. If you ARE runnning in separate directories already, then it would seem we’re dealing with a different beast…

    Michal Vodicka

    Backup config directory is good idea in any case. Years before I wrote a macro which does it automatically during every MEW startup. Config directory is copied to numbered directories; last 10 copies are kept so in the case of failure is is easy to find the newest working configuration and copy it back. It saved me numerous times; mostly because I write device drivers and occassional BSODs are unavoidable. But there are also other situations. Running multiple MEW instances is one, reaching windows number limit (~250) is the next. In this case a macro which isn’t prepared for it can overwrite meconfig.db (the limit should be removed in MEW X).

    Macro is started from MEW command line: E:\Mew91\Mew32.exe -SR -RMvUtils^BackupMEWConfig -NI and looks like this (it is necessary to write a file header and add some includes):

    [code:1hc8t55b]// —- configuration saving —————

    import Bool CopyFile(Asciiz ExistingFileName, Asciiz NewFileName, Bool FailIfExists)
    kernel32 "CopyFileA";

    import int CreateFile(Asciiz FileName, DWORD dwDesiredAccess, DWORD dwShareMode,
    pointer lpSecurityAttributes, DWORD dwCreationDistribution,
    DWORD dwFlagsAndAttributes, int hTemplateFile)
    kernel32 "CreateFileA";

    import Bool CloseHandle(int Handle)
    kernel32 "CloseHandle";

    import int GetFileAttributes(Asciiz FileName)
    kernel32 "GetFileAttributesA";

    import Bool SetFileAttributes(Asciiz lpFileName, DWORD FileAttributes)
    kernel32 "SetFileAttributesA";

    #define FILE_ATTRIBUTE_DIRECTORY 0x00000010


    #define FILE_ATTRIBUTE_READONLY 0x00000001

    #define BACKUP_NUM 10 // number of last saved backups

    #define _CfgBackup ( _ConfigDir + "BACKUP" )
    #define _TimeStamp ( "TimeStamp" )

    int FindOldestBackup() {
    /* ==================
    Tries to find the oldest backup dir to replace.

    int OldestTime = 0;
    int OldestBackup = 0;

    for ( int i = 0; i < BACKUP_NUM; i++ ) {
    str TSName = _CfgBackup + str(i) + "\\" + _TimeStamp;

    if (!File_Exists(TSName)) {
    // timestamp doesn’t exist, directory can be used for backup
    else {
    int ActTime = GetFileTime(TSName);

    if ((OldestTime == 0) || (ActTime < OldestTime)) {
    OldestTime = ActTime;
    OldestBackup = i;

    void BackupMEWConfig() {
    /* =================
    Backups all MEW configuration files. Should be run automaticaly
    after MEW start.
    int BackupNum = FindOldestBackup();
    str BackupPath = _CfgBackup + str(BackupNum) + "\\";
    struct WIN32_FIND_DATA Win32Data;
    struct DOS_FIND_DATA DosData;
    int FindHandle;
    int Number = 0;

    if (!CreatePath(BackupPath)) {
    RM("MessageBox /B=2/T=Backup/M=Error creating " + BackupPath + " directory");

    TTRACE("MvUtils", TDBG_WARN, "Starting config backup no.%d (%s)", BackupNum, BackupPath);

    FindHandle = FindFirstFile(_ConfigDir + "*.*", &Win32Data, &DosData);

    if (FindHandle != 0) {
    do {
    if (!(Win32Data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
    str NewName = BackupPath + Win32Data.cFileName;

    if (!CopyFile(_ConfigDir + Win32Data.cFileName, NewName, FALSE)) {
    int DisplayError = TRUE;

    if (GetLastError() == 5) {
    int Attr = GetFileAttributes(NewName);

    // destination is RO, remove this flag
    Attr &= 0xfffffffe; // ~FILE_ATTRIBUTE_READONLY;

    TTRACE("MvUtils", TDBG_DEBUG, "Copy destination %s is read-only, removing flag.", NewName);

    if (!SetFileAttributes(NewName, Attr)) {
    TTRACE("MvUtils", TDBG_ERROR, "Error %x setting attributes %x for file %s", GetLastError(), Attr, NewName);
    // and retry original operation anyway (to restore last error in the worst case)
    DisplayError = !CopyFile(_ConfigDir + Win32Data.cFileName, NewName, FALSE);
    if (DisplayError) {
    RM("MessageBox /B=2/T=Backup/M=Error [" + hex_str(GetLastError()) + "] copying " + NewName + " file");
    else {

    } while (FindNextFile(FindHandle, &Win32Data, &DosData));

    TTRACE("MvUtils", TDBG_WARN, "Config backup done, %d files saved.", Number);

    Make_Message(str(Number) + " files was saved to " + BackupPath);

    CloseHandle(CreateFile(BackupPath + _TimeStamp, 0, 0, 0, 2, 0, 0));

Viewing 5 posts - 1 through 5 (of 5 total)
  • You must be logged in to reply to this topic.