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