Hi Michael,
Thank you for testing.

> So I think that solves the 'hang'/CoCreateInstance issue, although it would
> be nice if 32-bit could run on 64-bit, since that's supported currently. Is
> this a known issue/limitation? If so, perhaps we can avoid registering the
> VSS provider if the arch doesn't match?

Agreed.
It's a known limitation. VSS provider is required to be matched with the OS 
arch.
I will add some code to skip installation of VSS provider if the arch doesn't 
match.

> Also, with 64-bit qemu-ga I do find that if I don't issue `net stop vss` prior
> to service install I still get the following error:
> 
> C:\Users\mdroth\Documents\qga>qemu-ga.exe -s install
>  Registering QEMU Guest Agent VSS Provider:
>    C:\Users\mdroth\Documents\qga\qga-vss.dll
>    C:\Users\mdroth\Documents\qga\qga-vss.tlb
>  Failed to pCatalog->InstallComponent. (Error: 8011045c) The application name 
>is
>  not unique and cannot be resolved to an application id

This is caused because VSS provider is already registered.
(And at the second time, it succeeds because doubled providers are removed...
> Removing COM+ Application: QEMU Guest Agent VSS Provider
> Removing COM+ Application: QEMU Guest Agent VSS Provider
).
This seems a side effect of removal of "unregistration before registration" 
code in v5.
I will fix this by checking if the provider with the same name is already 
registered
and then making the installation fail by error.

Thanks,
Tomoki Sekiyama

________________________________________
From: fluxion [fluks...@gmail.com] on behalf of Michael Roth 
[mdr...@linux.vnet.ibm.com]
Sent: Monday, July 22, 2013 4:33 PM
To: Tomoki Sekiyama; qemu-devel@nongnu.org
Cc: libaiq...@huawei.com; ler...@redhat.com; gham...@redhat.com; 
stefa...@gmail.com; lcapitul...@redhat.com; vroze...@redhat.com; 
pbonz...@redhat.com; Seiji Aguchi; ebl...@redhat.com; ar...@redhat.com
Subject: Re: RE: [PATCH v7 00/10] qemu-ga: fsfreeze on Windows using VSS

Quoting Tomoki Sekiyama (2013-07-22 15:02:23)
> Hi Michael,
>
> >> "CoCreateInstance(VSSCoordinator) failed. (Error: 80040154) Class not 
> >> registered
> >I have seen this error when I ran 32bit qemu-ga on 64bit Windows (2008 
> >server R2).
> >Just in case, could you confirm qemu-ga.exe and qga-vss.dll are built for the
> >correct architecture?
>
> I have confirmed that using 32bit qemu-ga.exe on 64bit Windows causes exactly
> what you explained at the previous e-mail. (And maybe the hung is caused by a
> dialog box popped up *behind* the terminal.... I think this is because the box
> belongs to a Windows service, but I don't know how to avoid it...)

Thanks, I was just about to confirm as well :) Problem doesn't seem to be
present if I switch to a 64-bit version.

And you're right, in the instances where the -s install freezes a dialog box
*does* pop up behind the terminal with the above error.

>
> Could you tell me which arch (32bit/64bit) of Windows and mingw
> (mingw32-* or mingw64-* in Fedora package) are you using?

This was a 32-bit binary (--cross-prefix=i686-w64-mingw32-) on a 64-bit
Windows 7 vm.

I've since built a 64-bit binary (--cross-prefix=x86_64-w64-mingw32-) and have
gotten past service install and successfully issued the freeze/thaw commands.

So I think that solves the 'hang'/CoCreateInstance issue, although it would
be nice if 32-bit could run on 64-bit, since that's supported currently. Is
this a known issue/limitation? If so, perhaps we can avoid registering the
VSS provider if the arch doesn't match?

Also, with 64-bit qemu-ga I do find that if I don't issue `net stop vss` prior
to service install I still get the following error:

 C:\Users\mdroth\Documents\qga>qemu-ga.exe -s install
 Registering QEMU Guest Agent VSS Provider:
   C:\Users\mdroth\Documents\qga\qga-vss.dll
   C:\Users\mdroth\Documents\qga\qga-vss.tlb
 Failed to pCatalog->InstallComponent. (Error: 8011045c) The application name is
 not unique and cannot be resolved to an application id

 CoCreateInstance. (Error: 80040154) Class not registered

 Removing COM+ Application: QEMU Guest Agent VSS Provider
 Removing COM+ Application: QEMU Guest Agent VSS Provider

Is this expected? And if there's no way around it, would it be possible to
notify users that they need to stop the VSS service prior to install the
service?

Thanks for looking into this!

>
> Thanks,
> Tomoki Sekiyama
>
> ________________________________________
> From: fluxion [fluks...@gmail.com] on behalf of Michael Roth 
> [mdr...@linux.vnet.ibm.com]
> Sent: Thursday, July 18, 2013 6:19 PM
> To: Tomoki Sekiyama; qemu-devel@nongnu.org
> Cc: libaiq...@huawei.com; ler...@redhat.com; gham...@redhat.com; 
> stefa...@gmail.com; lcapitul...@redhat.com; vroze...@redhat.com; 
> pbonz...@redhat.com; Seiji Aguchi; ebl...@redhat.com; ar...@redhat.com
> Subject: Re: [PATCH v7 00/10] qemu-ga: fsfreeze on Windows using VSS
>
> Quoting Tomoki Sekiyama (2013-07-15 11:20:23)
> > Hi,
> >
> > This is v7 of patch series to add fsfreeze for Windows qemu-guest-agent.
> >
> > changes from v7:
> >  - Fix COM initialization issue for Windows service thread (patch 07/10)
> >
> > v6: http://lists.nongnu.org/archive/html/qemu-devel/2013-07/msg01788.html
>
> Hi Tomoki,
>
> I'm also having some issues testing this, though I think my problem is a 
> little
> different than the issue in v6:
>
> When I initially ran qemu-ga -s install, I got some output indicating the VSS
> service was registered, but then it hung. I noticed afterward that I'd already
> had the service running, so figured that that might've been the problem. So I
> stopped the service and unregistered it (using a qemu-ga install that was in
> a separate directory).
>
> Then I went back to install via qemu-ga.exe -s install, and it just hangs with
> no output. I wasn't sure how to reset the state, so I took the Windows 
> approach
> and rebooted.
>
> After reboot, running qemu-ga -s install gives me:
>
> C:\Users\mdroth\Documents\qga>qemu-ga.exe -s install
> Registering QEMU Guest Agent VSS Provider:
>   C:\Users\mdroth\Documents\qga\qga-vss.dll
>   C:\Users\mdroth\Documents\qga\qga-vss.tlb
> Failed to pCatalog->InstallComponent. (Error: 8011045c) The application name 
> is
> not unique and cannot be resolved to an application id
>
> CoCreateInstance. (Error: 80040154) Class not registered
>
> Removing COM+ Application: QEMU Guest Agent VSS Provider
> Removing COM+ Application: QEMU Guest Agent VSS Provider
>
> [mdroth@vm5 ~]$
>
> I'm not sure if I'm still in a bad state from earlier, but I can't seem to
> recover from here.
>
> If I try running qemu-ga -s uninstall, then qemu-ga -s install again, I get a
> pop-up error saying:
>
> "CoCreateInstance(VSSCoordinator) failed. (Error: 80040154) Class not 
> registered
>
> Any ideas what's going on here? I'm on a Windows 7 vm and built using a Fedora
> 18 mingw environment. Let me know if you need any additional information to
> debug.
>
> Thanks!
>
> >
> >
> > * Description
> >   In Windows, VSS (Volume Shadow Copy Service) provides a facility to
> >   quiesce filesystems and applications before disk snapshots are taken.
> >   This patch series implements "fsfreeze" command of qemu-ga using VSS.
> >
> >
> > * How to build & run qemu-ga with VSS support
> >
> >  - Download Microsoft VSS SDK from:
> >    http://www.microsoft.com/en-us/download/details.aspx?id=23490
> >
> >  - Setup the SDK
> >    scripts/extract-vsssdk-headers setup.exe (on POSIX-systems)
> >
> >  - Specify installed SDK directory to configure option as:
> >    ./configure -with-vss-sdk="path/to/VSS SDK" 
> > --cross-prefix=i686-w64-mingw32-
> >
> >  - make qemu-ga.exe qga/vss-win32/qga-vss.{dll,tlb}
> >
> >  - Install qemu-ga.exe, qga/vss-win32/qga-vss.{dll,tlb}, and
> >    the other required mingw libraries into the same directory in guests
> >
> >  - Run `qemu-ga.exe -s install' and `net start qemu-ga' in the guests
> >
> > Any feedback are appreciated.
> >
> > ---
> > Tomoki Sekiyama (10):
> >       configure: Support configuring C++ compiler
> >       Add c++ keywords to QAPI helper script
> >       checkpatch.pl: Check .cpp files
> >       Add a script to extract VSS SDK headers on POSIX system
> >       qemu-ga: Add configure options to specify path to Windows/VSS SDK
> >       error: Add error_set_win32 and error_setg_win32
> >       qemu-ga: Add Windows VSS provider and requester as DLL
> >       qemu-ga: Call Windows VSS requester in fsfreeze command handler
> >       qemu-ga: Install Windows VSS provider on `qemu-ga -s install'
> >       QMP/qemu-ga-client: Make timeout longer for guest-fsfreeze-freeze 
> > command
> >
> >
> >  .gitignore                     |    1
> >  Makefile                       |    3
> >  Makefile.objs                  |    2
> >  QMP/qemu-ga-client             |    4
> >  configure                      |   87 +++++++
> >  hmp.c                          |    2
> >  hw/pci/pci.c                   |    2
> >  include/qapi/error.h           |   13 +
> >  qga/Makefile.objs              |    5
> >  qga/commands-win32.c           |   82 ++++++
> >  qga/main.c                     |   10 +
> >  qga/vss-win32.c                |  154 ++++++++++++
> >  qga/vss-win32.h                |   27 ++
> >  qga/vss-win32/Makefile.objs    |   23 ++
> >  qga/vss-win32/install.cpp      |  424 +++++++++++++++++++++++++++++++++
> >  qga/vss-win32/provider.cpp     |  513 
> > ++++++++++++++++++++++++++++++++++++++++
> >  qga/vss-win32/qga-vss.def      |   13 +
> >  qga/vss-win32/qga-vss.idl      |   20 ++
> >  qga/vss-win32/qga-vss.tlb      |  Bin
> >  qga/vss-win32/requester.cpp    |  487 
> > ++++++++++++++++++++++++++++++++++++++
> >  qga/vss-win32/requester.h      |   42 +++
> >  qga/vss-win32/vss-common.h     |  128 ++++++++++
> >  rules.mak                      |    9 +
> >  scripts/checkpatch.pl          |   37 ++-
> >  scripts/extract-vsssdk-headers |   35 +++
> >  scripts/qapi.py                |   12 +
> >  util/error.c                   |   35 +++
> >  27 files changed, 2146 insertions(+), 24 deletions(-)
> >  create mode 100644 qga/vss-win32.c
> >  create mode 100644 qga/vss-win32.h
> >  create mode 100644 qga/vss-win32/Makefile.objs
> >  create mode 100644 qga/vss-win32/install.cpp
> >  create mode 100644 qga/vss-win32/provider.cpp
> >  create mode 100644 qga/vss-win32/qga-vss.def
> >  create mode 100644 qga/vss-win32/qga-vss.idl
> >  create mode 100644 qga/vss-win32/qga-vss.tlb
> >  create mode 100644 qga/vss-win32/requester.cpp
> >  create mode 100644 qga/vss-win32/requester.h
> >  create mode 100644 qga/vss-win32/vss-common.h
> >  create mode 100755 scripts/extract-vsssdk-headers

Reply via email to