从Windows服务获取应用程序的BaseDirectory

时间:2017-03-28 12:44:10

标签: c# winforms windows-services

我有一个winform应用程序ABC。我正在使用clickonce在我的客户端设备上安装它。在它的BaseDirectory(我的应用程序的AppData \ Local \ Apps \ xx \ yy \ zz \)。在zz文件夹中,我有一个zip文件夹,我需要从Windows服务访问。有什么办法可以从我的win服务中获取AppData位置吗?它甚至可能吗?我认为这是不可能的,因为这意味着第三方可以影响申请。

2 个答案:

答案 0 :(得分:1)

最佳选项似乎是Alex K在评论中建议的内容,在安装时将其保存在注册表中并使用您的服务进行检索。

另一种选择可能是使用MSI,GitHub上有一个C#包装器。

一个例子:

// Look for installed products containing 'Word' in their name and show their installed location
foreach (var p in InstalledProduct.Enumerate())
{
    try
    {
        if (p.InstalledProductName.Contains("Word"))                     
            Console.Out.WriteLine("{0} is intalled in {1}", p.GUID, p.InstallLocation);                    
    }
    catch (MSIException ex)
    {
        // Some products might throw an exception trying to access InstalledProductName propoerty.
    }
}

答案 1 :(得分:0)

部分可能。您可以使用以下命令从服务代码获取客户端系统上的appdata本地目录:

var p = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

然后,您可以添加特定于您的应用程序的部分(“xx / yy / zz”),因为它不会在环境中的任何位置。我建议使用:

Path.Combine(p, "xx/yy/zz/yourfile.zip");

如果上面的特殊文件夹不是您需要的文件夹,您可以在msdn上参考SpecialFolder Enumeration

中的其余枚举值