Month: November 2012

  • A check box is not appearing on all “Spams” in WordPress Dashboard

    I did notice in WordPress that there is sometimes no check box displayed next to some comments of the “Spam” category. I am in such case unable to permanently delete them. It’s actually not a bug but the result of the fine grained security (i.e.: permissions).

    Click to Read More

    Actually, we see the check box used to handle a comment depending on our profile and the author of that comment…

    E.g.: I am using two distinct accounts in WordPress; one as “Administrator” to manage WordPress and one as “Author” to publish. But I did publish a few posts by accident with my “Administrator” account.

    When connected as an “Author”, I can see the comments of any type (including the spams) written on any post (including those published by other accounts). However, I can only handle the comments written in response to my own posts. For that reason, I don’t see a check box on comments written in response to posts of other accounts…

    It’s quite confusing because who did publish a post is not displayed in the screen displaying the comments 🙁

    Loading

  • Windows command

    Just as I intensively use windows hot keys and shortcuts that boost my productivity, I also like some “windows commands” to avoid clicking on sub-sub-sub-extra-sub-menus to reach some windows configuration screens…

    Click to Read More

    Using commands is straightforward, if you know it: Use the Shortcut  :start:Start +R and type your command in the dialog box.

    Here is a list of available commands, most of them being actually components like:

    • .cpl : « Control Panel » Applet
    • .msc : Microsoft System Console
    • .mmc : Microsoft Management Console.

    Control Panel Commands

    • control : opens the “Control Panel” window
    • control admintools : opens the “Administrative Tools”
      • :start:Start  > Control Panel\System and Security\Administrative Tools
    • control color : opens advanced appearance settings with the “Window Color and Appearance” tab to customize colors used in your theme
      • :start:Start  > Control Panel\Appearance and Personalization\Personalization\Window Color and Appearance\Advanced appearance settings…
    • control desktop or desk.cpl : opens display properties with the themes “Personalization” tab
      • :start:Start  > Control Panel\Appearance and Personalization\Personalization
    • control folders : opens “Folder options” mainly to customize the windows explorer
      • :start:Start  > Control Panel\Folder Options
    • control fonts : opens “Fonts” tab of the Appearance and Personalization” window where you can preview and delete available fonts
      • :start:Start  > Control Panel\ Fonts
    • control international or intl.cpl : opens the “Regional and Language” options
      • :start:Start  > Control Panel\Clock, Language, and Region\Region and Language
    • control keyboard : opens “Keyboard Properties” mainly to customize the speed parameters
      • :start:Start  > Control Panel\Hardware and Sound\Devices and Printers\ right click the keyboard and select Keyboard Settings
    • control mouse or main.cpl: opens mouse properties
      • :start:Start  > Control Panel\Hardware and Sound\Mouse (under Devices and Printers)
    • control netconnections or ncpa.cpl: opens “Network Connections”
      • :start:Start  > Control Panel\Network and Internet\Network and Sharing Center\Change adapter settings (on the left)
    • control userpasswords: opens “User Accounts” editor to change password
      • :start:Start  > Control Panel\User Accounts and Family Safety\User Accounts
    • control printers : opens “Printers and Faxes” available
      • :start:Start  > Control Panel\ View devices and printers (under Hardware and Sound)
    • control userpasswords2 or netplwiz : opens “User Account” for access restrictions and advanced user management.
    • control schedtasks or taskschd.msc : opens the “Tasks Scheduler”
    • optionalfeatures : opens the “Turn on/off Windows Features” utility
      • :start:Start  > Control Panel \Programs\Programs\Turn Windows features on or off

    Control Panel Applets

    • access.cpl : opens “Ease of Access Center”.
    • appwiz.cpl : opens the “Add/Remove programs” wizard
      • :start:Start  > Control Panel\Uninstall a program (under Programs)
    • desk.cpl : opens display properties with the themes “Personalization” tab
      • :start:Start  > Control Panel\Appearance and Personalization\Personalization
    • hdwwiz.cpl or devmgmt.msc : opens the “Device Manager” utility
      • :start:Start  > Control Panel\System and Security\Device Manager (under System)
    • intl.cpl : opens the “Regional and Language” options
      • :start:Start  > Control Panel\Clock, Language, and Region\Region and Language
    • irprops.cpl : infrared utility tool (if installed)
    • joy.cpl : opens “Game Controllers” settings
    • main.cpl : opens “Mouse Properties”
      • :start:Start  > Control Panel\Hardware and Sound\Mouse (under Devices and Printers)
    • mmsys.cpl : opens “Sound “ utility with the Playback, Recording, Sounds and Communication tabs
      • :start:Start  > Control Panel\Hardware and Sound\Sound
    • ncpa.cpl : opens “Network Connections”
      • :start:Start  > Control Panel\Network and Internet\Network and Sharing Center\Change adapter settings (on the left)
    • powercfg.cpl : opens “Power Options” properties for Power Plan configuration
      • :start:Start  > Control Panel\Hardware and Sound\Power Options
    • sysdm.cpl : opens “System Properties”
      • :start:Start  > Control Panel\System and Security\System\Change settings (bottom right) – Win + pause
    • telephon.cpl : opens the phone/modem “Location Information”
    • timedate.cpl : opens “Date and Time” properties
      • :start:Start  > Control Panel\Clock, Language, and Region\Date and Time
    • wscui.cpl : opens the “Action Center” for Windows “Security Management” et “Maintenance”
      • :start:Start  > Control Panel\System and Security\Action Center
    • wuaucpl.cpl : opens “Windows Updates”
      • :start:Start  > Control Panel\System and Security\Windows Update

    System Consoles

    • mmc : opens the “Microsoft Management Console”
    • azman.msc : opens “Authorization Management” console
    • certmgr.msc : opens “Certificate Management” console
    • compmgmt.msc : opens the “Computer Management” console
    • comexp.msc or dcomcnfg: opens the “Component Services” console including COM+, IIS, Event Viewer and Services Manager, …
    • eventvwr : opens the “Event Viewer”
    • fsmgmt.msc : opens the “Shared Folders” console
    • gpedit.msc : opens the “Local Group Policy Editor” console
    • lusrmgr.msc : opens the “Local Users and Groups” console
    • napclcfg.msc : opens the “NAP Client Configuration” console
    • rsop.msc : opens the “Resultant Set of Policy” issued from all defined “Group Policy” objects
    • services.msc : opens the “Service Manager”
    • secpol.msc : opens the “Local Security Policy” console
    • wmimgmt.msc : opens the (WMI) “Window Management Instrumentation”

    Windows utility and applications

    • explorer : opens Windows Explorer ( :win: + E  )
    • iexplorer : opens Internet Explorer
    • calc : opens Calculator
    • soundrecorder : opens sound recording tool
    • dpinst : opens the “Device Driver Installation Wizard”
    • dvdplay : play CD or DVD
    • osk : opens “On-Screen Keyboard” (Win+U)
    • magnify : opens “Magnifier”
    • dialer : opens “Phone Dialer”
    • eudcedit : opens the “Private Character Editor”
    • sndvol : opens the “volume mixer”
    • rstrui : opens the “System Restore”
    • msinfo32 : opens the “System Information”
    • mrt : opens the “Malicious Software Removal”
    • taskmgr : opens “the Windows Task Manager” (Ctrl + Alt + Esc)
    • cmd : opens a command prompt
    • sigverif : opens the “File Signature Verification” tool
    • winver : displays your Windows version
    • iexpress : opens the wizard for creating self-extracting archives.
    • mblctr : opens the “Mobility Center” on laptops only (Win+X)
    • msra : opens “Windows Remote Assistance” to request help to a friend
    • mstsc: opens the “Remote Desktop connection” window
      • mstsc -v:host opens directly the remote desktop of the host.
    • msdt : opens the “Microsoft support diagnostic tool”
    • printbrmui : opens “Printer Migration Wizard” to export/import queues and printer drivers to/from file.
    • shrpubw : opens the “Create a shared folder wizard”
    • narrator : starts the “Windows Narrator”
    • wscript : opens the “Windows Script host settings” window
    • fxscover : opens the “Fax Cover Sheet Editor”
    • iscsicpl : opens the “iSCSI Initiator” properties
    • mdsched : opens the “Windows Memory Diagnostics” tool
    • dxdiag : opens the “DirectX Diagnostics” tool
    • odbcad32 : opens the “ODBC Data Source Administrator” tool
    • regedit : opens the “Registry editor” with support to search on values. May not be used to set permissions.
    • regedt32: opens the “Registry editor” with support to set permissions. May not be used to search on values (only searching for keys is supported).
    • verifier : opens the “Driver Verifier Manager”
    • cliconfg : opens the “SQL Server Client Network Utility”
    • colorcpl : opens the “Color Management” tool used to calibrate displays ad fine-tune color rendering.
    • credwiz : open the “Stored User Names and Password” wizard to backup and recover user passwords
    • mobsync : opens the “Synchronization Center”:
    • msconfig : opens the “System Configuration” utility which give access to all Startup and Boot options
    • syskey : opens the “Windows Account Database” security management which allows the enable data encryption on Windows.
    • comp : Compare files in a console

    Disk management

    • diskmgmt.msc : opens the “Disk Management” console
    • cleanmgr : opens the “Disk Cleanup” utility
    • dfrgui : opens “Disk Defragmenter”
    • chkdsk : starts a complete analysis of disk partition in console mode
    • diskpart : starts the “Disk Partitioning tool” in console mode

    Connection management

    • ipconfig: lists the configuration of IP addresses on your PC (for more information type ipconfig/? in the CMD menu)
      • ipconfig /all : show details
      • ipconfig /release : release IP of all adapters
      • ipconfig /renew : renew IP of all adapters
      • ipconfig /displaydns : display DNS cache entries
      • ipconfig /flushdns : delete all DNS cache entries
      • ipconfig /registerdns : refresh DHCP and re-register DNS
    • inetcpl.cpl : opens the “Internet Properties”
    • firewall.cpl : opens the “Windows firewall” settings: Control Panel\System and Security\Windows Firewall
    • fw.msc : opens the “Windows Firewall with Advanced Security” console

    Miscellaneous commands

    • netproj : allow or not connecting to a network projector
    • logoff : closes the current session
    • shutdown : shuts down Windows
    • shutdown -a : to interrupt Windows shutdown
    • dism /online /cleanup-image /spsuperseded : clean cache for installation of service packs (useful to release a lot of space on the system drive!)
    • sfc : System File Checker (Requires Windows CD if the cache is not available):
      • sfc /scannow: immediately scans all system files and repairs damaged files
      • sfc /VERIFYONLY: scans only those files system
      • sfc /Scanfil = “name and file path”: scans the specified file, and repairs if damaged
      • sfc /VERIFYFILE = “name and file path”: Scans only the file specified
      • sfc /scanonce: scans the system files on the next restart
      • sfc /REVERT: return the initial configuration (For more information, type sfc /? In the command prompt CMD.
      • sfc /scanboot: scans the system files on every boot
      • sfc /purgecache: purge File Cache
      • sfc /cachesize=x: Set Cache Size to size x:
    • ftp : ftp client
    • telnet : Telnet client
    • rasphone : Manage Remote Access Service connections
    • msiexec : Windows Installer
    • wiaacmgr : Windows Picture Import Wizard (Need camera/scanner connected)

    Environment Variables

    • %WINDIR% or %SYSTEMROOT%: windows installation folder (e.g.: C:\Windows)
    • %PROGRAMFILES%: location where programs are installed (e.g.: C:\Program Files)
    • %USERPROFILE%: location of currently logged user’s profile (e.g.: C:\Users\ [username])
    • %HOMEDRIVE%: partition where the operating system is installed (e.g.: C:)
    • %HOMEPATH%: location of currently logged user’s home (e.g.: \Users\ [username])
    • %TEMP%: location of the temporary folder

    Sources: Oreilly, Microsoft Control Panel, Web Talk’s Command Guide.

    Command to Control Panel

    Control Panel Applet

    Command

     
     
    Action Center control /name Microsoft.ActionCenter  
    control wscui.cpl  
    Add Features to Windows 8 control /name Microsoft.WindowsAnytimeUpgrade  
    Administrative Tools control /name Microsoft.AdministrativeTools  
    control admintools  
    AutoPlay control /name Microsoft.AutoPlay  
    Biometric Devices control /name Microsoft.BiometricDevices  
    BitLocker Drive Encryption control /name Microsoft.BitLockerDriveEncryption  
    Bluetooth Devices control bthprops.cpl13
    Color Management control /name Microsoft.ColorManagement  
    Credential Manager control /name Microsoft.CredentialManager  
    Date and Time control /name Microsoft.DateAndTime  
    control timedate.cpl  
    control date/time  
    Default Programs control /name Microsoft.DefaultPrograms  
    Device Manager control /name Microsoft.DeviceManager  
    control hdwwiz.cpl  
    devmgmt.msc  
    Devices and Printers control /name Microsoft.DevicesAndPrinters  
    control printers  
    Display control /name Microsoft.Display
    Ease of Access Center control /name Microsoft.EaseOfAccessCenter  
    control access.cpl  
    Family Safety control /name Microsoft.ParentalControls  
    File History control /name Microsoft.FileHistory  
    Flash Player Settings Manager control flashplayercplapp.cpl  
    Folder Options control /name Microsoft.FolderOptions  
    control folders  
    Fonts control /name Microsoft.Fonts  
    control fonts  
    Game Controllers control /name Microsoft.GameControllers  
    control joy.cpl  
    Get Programs control /name Microsoft.GetPrograms  
    Home Group control /name Microsoft.HomeGroup  
    Indexing Options control /name Microsoft.IndexingOptions  
    rundll32.exe shell32.dll,Control_RunDLL srchadmin.dll  
    Infrared control /name Microsoft.Infrared  
    control irprops.cpl  
    Internet Options control /name Microsoft.InternetOptions  
    control inetcpl.cpl  
    iSCSI Initiator control /name Microsoft.iSCSIInitiator  
    Keyboard control /name Microsoft.Keyboard  
    control keyboard  
    Language control /name Microsoft.Language  
     
    Location Settings control /name Microsoft.LocationSettings  
    Mail4 control mlcfg32.cpl5  
    Mouse control /name Microsoft.Mouse  
    control main.cpl  
    control mouse  
    Network and Sharing Center control /name Microsoft.NetworkAndSharingCenter  
    Network Connections control ncpa.cpl  
    control netconnections  
    Network Setup Wizard control netsetup.cpl  
    Notification Area Icons control /name Microsoft.NotificationAreaIcons  
    Offline Files control /name Microsoft.OfflineFiles  
    Pen and Touch control /name Microsoft.PenAndTouch  
    control tabletpc.cpl  
    Performance Information and Tools control /name Microsoft.PerformanceInformationAndTools  
    Personalization control /name Microsoft.Personalization  
    control desktop  
     
    Phone and Modem control /name Microsoft.PhoneAndModem  
    control telephon.cpl  
    Power Options control /name Microsoft.PowerOptions  
    control powercfg.cpl  
    Programs and Features control /name Microsoft.ProgramsAndFeatures  
    control appwiz.cpl  
    Recovery control /name Microsoft.Recovery  
    Region control /name Microsoft.RegionAndLanguage  
    control intl.cpl  
    control international  
    RemoteApp and Desktop Connections control /name Microsoft.RemoteAppAndDesktopConnections  
    Scanners and Cameras control /name Microsoft.ScannersAndCameras  
    Screen Resolution control desk.cpl  
    Sound control /name Microsoft.Sound  
    control mmsys.cpl  
    Speech Recognition control /name Microsoft.SpeechRecognition  
    Storage Spaces control /name Microsoft.StorageSpaces  
    Sync Center control /name Microsoft.SyncCenter  
    System control /name Microsoft.System  
    System Properties control sysdm.cpl  
    Tablet PC Settings control /name Microsoft.TabletPCSettings  
    Task Scheduler7 control schedtasks  
    Taskbar control /name Microsoft.Taskbar  
    rundll32.exe shell32.dll,Options_RunDLL 1  
    Text to Speech control /name Microsoft.TextToSpeech  
    Troubleshooting control /name Microsoft.Troubleshooting  
    User Accounts control /name Microsoft.UserAccounts  
    control userpasswords  
    Windows 7 File Recovery control /name Microsoft.BackupAndRestore  
    Windows Defender control /name Microsoft.WindowsDefender  
    Windows Firewall control /name Microsoft.WindowsFirewall  
    control firewall.cpl  
    Windows Mobility Center control /name Microsoft.MobilityCenter  
    Windows SideShow control /name Microsoft.WindowsSideShow  
    Windows Update control /name Microsoft.WindowsUpdate  

    See also the shortest path to access any Control Panel Applet.

    Click to Read More

    Notice: Another quick access to all “Control Panel” applet if you don’t want to type commands.

    1. Press Ctrl + Esc
    2. Click on “Control Panel”
    3. Start to type the title of the applet (no need to click in the search area)

    You may also create your own shortcut key to access directly the “Control Panel”:

    1. Create a shortcut (in any folder) to C:\Windows\System32\control.exe
    2. Assign a shortcut Key to that shortcut via the tab “Shortcut” of its “Properties”.
    See also “here

    Loading

  • Sync MS Outlook and Android using gmail account

    I really like MS Outlook and use it on all my Windows PC and laptops – at work as well as at home. But there was nothing offered my MS to sync Outlook’s emails, contacts and calendars between multiple PC and Android. So, I started to use a gmail account to that purpose.

    Click to Read More

    • First, I did enable the imap support on my gmail account and took note of all the gmail “imap parameters” for the next steps.
    • Next, I did configure an imap account to access my gmail mailbox in MS Outlook (on all my PC/Laptops).
    • A also configured my Google account on my Android smartphone to access my gmail mailbox , my Google Calendar and my Google Contacts.
    • Finally, I did install two freeware on all my Windows PC to sync my Google Calendar and my Google Contacts with Outlook:
      • Go Contact Sync Mod” to sync my Outlook’s Contacts with gmail (both way)
      • Google Calendar Sync” to sync my Outlook’s Calendar with gmail (both way on my private PC, one way at work => to get my professional appointments on my personal computers but no the opposite).

    Et voilà 😉

     

    Now, I should have a look on my “Outlook Web Account” (previously “hotmail”) to see if I could not use it to sync MS Outlook and Android in a similar way… MS did add/integrate indeed several services which deserve some attention…

    Loading

  • Web Site projects, TFS and branches can mess up your workspace…

    Yet another issue experienced when working on multiple branches in TFS: working with branched Visual Studio Web Site Projects (not to be confused with Visual Studio Web Application Projects) could indeed result in the creation of messy mappings in your workspace. This is due to the way Visual Studio manages the Virtual Directories behind Web Site Projects.

    Click to Read More

    My colleagues reported indeed some troubles when working with Visual Studio 2010 on Visual Studio Solutions containing Web Sites (not Web Applications) branched, e.g., from an existing TFS folder $/TeamProject/Main/Website onto a new branch $/TeamProject/Dev/WebSite (They still have indeed a few such Web Site Projects. Those cannot be upgraded into Web Applications as they use a framework that relies on various typical features of web sites, not supported by web applications. In addition, note that on the development workstations, the web sites are hosted in IIS due to some prerequisites of that framework, a.o. some limitation on the host header name and port).

    Assume now that $/TeamProject is mapped withing a local workspace on C:\TFS\TeamProject, that there is no other mapping in this workspace and that one checks-in a new Web Site created in C:\TFS\TeamProject\Dev\WebSite. By default, the resulting server items will be located in  $/TeamProject/Dev/WebSite. And as you should know, a virtual directory named “WebSite” will have been created in IIS by Visual Studio and mapped on C:\TFS\TeamProject\Dev\WebSite behind the scene – mapping which is saved in the Visual Studio suo file).

    Next, assume that one does a reverse integration of the Dev branch on the Main branch, that one checks-in the pending changes and that one opens next the Visual Studio Solution located in C:/TFS/TeamProject/Main (opening de facto also the web site)

    Using Web Application Projects instead of a Web Site Projects, Visual Studio would alert the user that a Virtual Directory already exists with the same name but with another physical path (C:/TFS/TeamProject/Dev/WebSite in this case). And the user would be prompted to possibly redefine this Virtual Directory with the new location (i.e.: with C:/TFS/TeamProject/Main/WebSite). If the user refuses, the Web Application won’t be loaded in Visual Studio. If he agrees, the Virtual Directory is remapped on the new location.

    But with Web Site Projects, it’s slightly different…. Visual Studio prompts the user to reuse the Virtual Directory. If the user refuses, a new Virtual Directory with the same name but suffixed with “_1” is created and mapped on the new physical path (opening again the web site from yet another physical location would results in suffixes “_2”, “_3”, etc…). This new name is unfortunately an issue for my colleagues, if they want to run the web site, again due to some constraints of the framework in use.

    Instead, if the user accepts to reuse the Virtual Directory (expecting a behavior similar to the one experienced with Web Application Projects), Visual Studio will not redefine the physical location of the Virtual Directory; it will create new mappings in the workspace to get the sources from TFS in the physical location currently defined for the existing Virtual Directory. I.e.: the definition of the workspace will be like:

    • $/TeamProject                          ==>  C:/TFS/TeamProject
    • $/TeamProject/Main/WebSite ==>  C:/TFS/TeamProject/Dev/WebSite
    And the Virtual Directory “WebSite” will be kept mapped on the physical location C:/TFS/TeamProject/Dev/WebSite.

    Guess what if the user reopens later the solution in C:/TFS/TeamProject/Dev to implement new features on the web site in the Dev branch ? He will actually check-in his changes under the branch $/TeamProject/Main/

    Upgrade to Web Applications is not an option at all – it was already investigated years ago and the cost was to high. But I could possibly investigate the use of the Visual Studio Development Web Server instead of IIS, although it is a prerequisite for the framework used in those web sites projects.

    As a temporary solution, I suggest all users to delete any existing Virtual Directory before opening a Solution containing Web Sites Projects. If they have already reused an existing Virtual Directory, I suggest them to clean the messy mappings in their workspace and delete next the existing Virtual Directory. If they have a Solution working with a Virtual Directory suffixed with _1, I suggest them to delete their .suo file (otherwise Visual Studio will always recreate a Virtual Directory with that name when opening the Web Site Projects) and delete that Virtual Directory.

    Notice: in some case (if not deleting/recreating correctly the Virtual Directory and the suo), you could have Visual Studio Solution files opened from various branches referencing the same Virtual Directory, obviously mapped on only one physical path, but without extra mappings in the workspace… And Visual Studio won’t prompt you to use the existing Virtual directory when opening a solution. In such a case, delete the suo file of that solution.

    Loading

  • MSSCCI, TFS and branches can mess up your workspace…

    At work, some colleagues are developing a standalone application hosted within the Visual Studio Isolated Shell. This application makes use of the DSM extension for Visual Studio to generate source code based on diagrams, source code which should be stored within TFS. Unfortunately, Team Explorer does not integrate with the Visual Studio Isolated Shell 🙁

    So, they use MSSCCI as a solution to access TFS. But they recently noticed that this solution was messing up their workspace when working in multiple branches.

    Click to Read More

    TFS can be accessed from the Visual Studio Isolated Shell using the MSSCCI provider for Team Foundation (<= here the link for the 32bits/VS 2010 version).

    My colleagues reported however some troubles when working on Visual Studio Solutions branched, e.g., from an existing TFS folder $/TeamProject/Main onto a new branch $/TeamProject/Dev.

    Assume that $/TeamProject is mapped in a local workspace on C:\TFS\TeamProject, that there is no other mapping in this workspace and that one checks-in a new Visual Studio Solution created in C:\TFS\TeamProject\Dev (with one sub-folder per included Visual Studio Project). By default, the resulting server items will be located in  $/TeamProject/Dev with all projects’ sub-folders created “recursively” bellow.

    Next, assume that one does a reverse integration of the Dev branch on the Main branch, that one checks-in the pending changes and that one opens next the Visual Studio Solution located in C:/TFS/TeamProject/Main.

    It appears that, behind the scene, Visual Studio with MSSCCI will create new workspace mappings between $/TeamProject/Main/xxx and C:/TFS/TeamProject/Dev/xxx. Any “Get Latest” made on the Main folder in TFS will update the local Dev subfolders! And when one will later open the Visual Studio Solution in this local Dev folder, expecting to work on the Dev branch, one will actually be working on the Main branch 😉

    The reason is that the Visual Studio Isolated Shell with MSSCCI is using absolute paths in the Visual Studio Solution Files as references to included Visual Studio Project files. Visual Studio with Team Explorer is using relative paths instead. And when one opens a Visual Studio Solution Files containing absolute paths, mappings are created in the workspace, between the “server” items and those local “absolute paths”. I.e.: the definition of the  workspace will be like:

    • $/TeamProject                          ==>  C:/TFS/TeamProject
    • $/TeamProject/Main/Project1   ==>  C:/TFS/TeamProject/Dev/Project1
    • $/TeamProject/Main/Project2   ==>  C:/TFS/TeamProject/Dev/Project2

    If you ignore that absolute paths are used in your Visual Studio Solution file and if you don’t pay attention to the server path of your pending changes, you will really be confused when your colleagues will complain that you didn’t check-in your new features in the right branch or when a Gated Build will start on the Main branch when you check-in your changes 😀

    Loading

  • Assembly Version, File Version and Product Version: The Butterfly Effect

    Assembly Version, File Version and Product Version are “related” if you don’t specify them explicitly… and you could be surprised by one of the side effect: loosing you application data or user settings when incrementing the Assembly File Version.

    Click to Read More

    How are those versions specified:

    By default, any new Visual Studio Project includes an AssemblyInfo file defining default values (major, minor, build and revision) for the Assembly Version and Assembly File Version:

    [csharp][assembly: AssemblyVersion("1.0.0.0")]
    [assembly: AssemblyFileVersion("1.0.0.0")][/csharp]
    • A difference in the build number represents a recompilation of the same source. This is usually appropriate because of processor, platform, or compiler changes.
    • Assemblies with the same name, major, and minor version numbers but different revision numbers are intended to be fully interchangeable. This is usually appropriate for security fix, etc …
    • “[assembly: AssemblyVersion(“65534.65534.65534.65534“)]” is maximum.

    MSBuild can auto-increment the build and revision numbers at each build if we provide a (*) in place of those figures. Ex.

    [csharp][assembly: AssemblyVersion("1.0.*")][/csharp]

    or

    [csharp][assembly: AssemblyVersion("1.0.0.*")][/csharp]

    In such cases, the build number is generated based on the current day and the revision number is generated based on the number of seconds since midnight. Replacing the revision number only with a (*) would be irrelevant. Indeed, consecutive builds would most probably have lower revisions.

    There is no default value set for the Product Version when creating a new Visual Studio Project. But a value can be set manually in the AssemblyInfo file using:

    [csharp][assembly: AssemblyInformationalVersion("1.0.0.0")][/csharp]

    Usually, the Product Version is a value like major.minor.build, but it can actually be any string, like “1.0 RC”, etc… Don’t use (*) in this string as it wouldn’t be replaced by an auto-incremented figure. Instead, it would crash your application in some cases (See further for the explanation). Notice also that before VS 2010, using anything else that major.minor.build.rev was resulting in  false warning during compilation.

    What do those versions mean:

    Assembly Version : This is the version number used by framework during build and at runtime to locate, link and load the assemblies. When you add reference to any assembly in your project, it is this version number which gets embedded. At runtime, CLR looks for assembly with this version number to load. But remember this version is used along with name, public key token and culture information only if the assemblies are strong-named signed. If assemblies are not strong-named signed, only file names are used for loading.
     
    Assembly File Version : This is the version number given to file as in file system. It is displayed by Windows Explorer. Its never used by .NET framework or runtime for referencing. But it can be used by OS tools.

    Product Version (a.k.a Assembly Informational Version): Defines an additional version information for an assembly manifest. This is the version you would use when talking to customers or for display on your website..

    What if a version is not specified:

    • If the Assembly version is not explicitly specified, it takes the value of 0.0.0.0.
    • If the Assembly File version is not explicitly specified, it takes the value of the Assembly version.
    • If the Product version is not explicitly specified, it takes the value of the Assembly File version.
    How could issues occurred due to this relation:

    By your fault 🙂

    At work, we recently decided to manage the major and minor numbers of the Assembly Versions at build time, within our TFS Build Process Template. Assembly Versions’ build and release numbers are kept equal to 0 while major and minor are enforced with values provided through Build Definitions’ parameters. At the same time,  we auto-increment the build and release numbers of the Assembly File Versions while keeping their major and minor numbers aligned with those of the Assembly Versions. We don’t touch the Product Version. This was designed as recommended in KB 556041.

    As mentioned, major and minor numbers are specified through custom parameters of our Build Definitions. The build number is computed to reflect directly the current day using a format like “YMMdd” with Y = year modulo x to be <= 6 (None of our product has a longer life). The release number is set with the auto-incremented value provided out-of-the box by Team Build.

    Previously, most of the binaries were compiled locally, on development workstations, and there was no version management at all (There was simply no need for any such versioning): Assembly Version and Assembly File Version were always kept unchanged.

    The change introduced with our Build Process Template had an unexpected consequence: As there never was any Product Version specified explicitly in the AssemblyInfo, binaries’ Product Versions were always equal to the Assembly File Version… kept therefore unchanged through all builds. However, since we started to auto-increment the Assembly File Version, the Product Version started to increment too…

    And ? And some users started to complain that their custom settings were lost after the installation of each new version…

    We quickly noticed that, as usually recommended, developers were making use the two following properties to store  respectively application’s data and users’ data:

    [csharp]Application.CommonAppDataPath[/csharp]
    [csharp]Application.LocalUserAppDataPath[/csharp]

    And after some investigations on MSDN, it appeared that the path returned by those properties depend among other on the Product Version 🙁

    Depending on the OS, CommonAppDataPath is usually like:

    • %SystemDrive%\Documents and Settings\All Users\Application Data\<CompanyName>\<ProductName>\<ProductVersion> or
    • %SystemDrive%\ProgramData\<CompanyName>\<ProductName>\<ProductVersion>

    And LocalUserAppDataPath is like:

    • “%SystemDrive%\Documents and Settings\<UserId>\Local Settings\Application Data\<CompanyName>\<ProductName>\<ProductVersion>” or
    • “%SystemDrive%\Users\<UserId>\AppData\Local\<CompanyName>\<ProductName>\<ProductVersion>“.

    So, indeed, each new release of our product having now a new Product Version, application’s data and users’ data of the previous versions are not used anymore…

    Any (*) used in the Product Version (e.g.: 1.0.*) wouldn’t be replaced by auto-incremented build/release numbers (as mentioned previously), the “AppDataPath”  above would contain an illegal character; reason why the application would crash when accessing this path.

    This also impacted applications accessing settings in the registry with methods like:

    [csharp]Application.UserAppDataRegistry.SetValue()[/csharp]
    [csharp]Application.CommonAppDataRegistry.SetValue()[/csharp]

    Those methods access respectively data under 

    • HKCU\Software\<CompanyName>\<ProductName>\<ProductVersion>\
    • HKLM\Software\<CompanyName>\<ProductName>\<ProductVersion>\
    Read also this paper on User Settings Management.
    See also one of my sources here about this topic.

    Loading

    ,
  • From WordPress 3.3 to 3.4 on Synology: Almost YAUN !!

    No! I don’t mean “Yet Another Unix Nerd”!!!

    But upgrading WordPress from 3.3 to 3.4 on my DS209+ was almost “Yet Another Upgrade Nightmare” 🙂

    Click to Read More

    Upgrading a package for Synology is usually really a piece of cake. Unfortunately, the upgrade package for WordPress caused me difficulties.

    First issue: MySQL password

    The setup failed quite immediately after downloading, complaining that there was possibly an issue with the MySQL password. After some investigation, it appeared to me that :

    • the DSM Package Center is running as Synology’s “root” user and
    • the setup of WordPress was trying to access MySql with that account but without any password.
    I found on Synology’s Forum that “Current wordpress package requires an default mysql account root with empty password to create database successfully. If you have set mysql root password before, please install phpMyAdmin to reset the password first.

    And unfortunately (although quite normal), I did set a password for the MySql “root” user in the past… So, as suggested in the message above, I did reset MySql root password to blank.

    • Go to phpMyAdmin, opened the “Users” tab and clicked “Edit Privileges” for the user “root” with Host=localhost.
    • In the “Edit Privileges” dialog box, scroll down to the “Change Password” area and select “No Password” before clicking “Go”.
    • Finally, back to the “Users” page, click “Create PHP code” to apply the change. At that moment, phpMyAdmin could prompt you to re-enter your credentials (root with a blank password).

    I did next restart the update of the WordPress which finally completed fine. But…

    Next issue: Page Not Found

    My Blog was not reachable anymore after the upgrade ? Damned… WordPress was imply disabled… I had to click “Start” next to the WordPress Package in the DSM Package Center 😆

    And finally, my home page appeared… I went immediately to the administration dashboard where I discovered that the setup was actually not yet complete. In this dashboard, I found a message asking me to click a button to upgrade the database. Fortunately, nothing wrong occurred during this upgrade 🙂

    Last issue: This is somewhat embarrassing, isn’t it?

    Although the home page appeared correctly, I was not able to open anything else: no post, no “custom” pages, no categories, … For each of them, I got the WordPress’ “Page Not Found”… All the permalinks appeared somewhat “corrupted”… No idea why.

    Fortunately (bis ter et repetita), fixing this issue was not difficult. I simply had to re-enforce the right Permalinks structure.

    • Go back to the administration dashboard and select the menu “Permalinks” under “Settings”.
    • Check that “your” structure of Permalinks is still selected and did click “Save Changes” (Even if you didn’t change the structure).

    And miracle! Everything went back to normal. I didn’t lose any customization or plugins except my custom smilies from \web\wordpress\wp-includes\images\smilies (fortunately backuped),…

    YASU!!

    No! I Don’t mean “Yet Another System Utility”!!! But “Yet Another Successful Update” 😆

    Loading

    ,