代码之家  ›  专栏  ›  技术社区  ›  Ben Griswold

卸载命令仅在发布模式下失败

  •  3
  • Ben Griswold  · 技术社区  · 16 年前

    我能够通过命令行和自定义Inno安装程序成功卸载第三方应用程序。

    命令行执行:

    MSIEXEC.exe /x {14D74337-01C2-4F8F-B44B-67FC613E5B1F} /qn
    

    [Run]
    Filename: msiexec.exe; Flags: runhidden waituntilterminated; 
    Parameters: "/x {{14D74337-01C2-4F8F-B44B-67FC613E5B1F} /qn";
    StatusMsg: "Uninstalling Service...";
    

    C#代码:

    string fileName = "MSIEXEC.exe";
    string arguments = "/x {14D74337-01C2-4F8F-B44B-67FC613E5B1F} /qn";
    
    ProcessStartInfo psi = new ProcessStartInfo(fileName, arguments)
    {
        CreateNoWindow = true,
        UseShellExecute = false,
        RedirectStandardOutput = true
    };
    
    Process process = Process.Start(psi);
    string errorMsg = process.StandardOutput.ReadToEnd();
    process.WaitForExit();
    

    但是,相同的C#代码在作为已编译、部署的Windows服务运行时会产生以下故障输出:

    "This action is only valid for products that are currently installed."
    

    补充意见:

    • 正在发布的Windows服务 卸载命令正在上运行 代码所在的机器 在调试模式下测试。窗户 服务正在以用户身份运行/登录 本地系统帐户。
    • 我查阅了我的申请日志 我已经证实 已执行的命令参数是thhe 在调试和发布模式中都相同。
    • 我已经咨询了事件查看器 但它没有提供任何线索。

    思想?任何帮助都将不胜感激。谢谢

    5 回复  |  直到 10 年前
        1
  •  2
  •   Community paulsm4    7 年前

    步骤1: Check the MSI error log files

    我怀疑您的问题是由于以本地系统运行造成的。

    本地系统帐户与具有管理员权限的普通用户帐户不同。它无法访问网络,并且它与注册表和文件系统的交互非常不同。

    c:\windows\temp

        2
  •  2
  •   Sid M Vladimir Enchev    10 年前

    我在过去的安装过程中也遇到过类似的问题,一位客户使用系统帐户进行安装,这给非管理用户带来了各种各样的权限问题。

    如果应用程序没有显示为“已安装”,MSI日志文件并没有真正的帮助,我建议从捕获 MSIINV.EXE 在系统帐户下,这将为您获取当前安装的程序(或用户看到安装的程序)的“清单” http://blogs.msdn.com/brada/archive/2005/06/24/432209.aspx

        3
  •  1
  •   Ben Griswold    16 年前

    感谢那些提供帮助的人。这似乎是权限问题。我已将我的服务更新为在管理员帐户下运行,并且它能够成功卸载第三方应用程序。就Orion而言,虽然本地系统帐户是一个强大的帐户,可以完全访问系统-- http://technet.microsoft.com/en-us/library/cc782435.aspx --它似乎没有执行卸载所需的权限。

        4
  •  0
  •   Paul Lalonde    16 年前

    这很奇怪。LocalSystem绝对有安装应用程序的权限(这就是Windows Update和Active Directory中的软件部署的工作方式),因此它也应该能够卸载。

    也许应用程序最初是按用户安装的,而不是按机器安装的?

        5
  •  0
  •   Ben Griswold    16 年前

    @保罗·拉隆德