ClickOnce问题

时间:2009-08-12 21:33:59

标签: .net visual-studio-2008 clickonce

我有一个包含Client项目,WindowsService项目和ServiceConsole项目的VS2008解决方案。部署时,我希望WindowsService和ServiceConsole位于同一文件夹中,因为ServiceConsole需要访问WindowsService的app.config(即Settings.settings)文件来配置它。 ClickOnce可以实现这一点吗?如果是这样,实现这一目标的步骤是什么?

我的另一个问题是关于客户端的设置。将安装文件发布到文件服务器上的某个位置后,是否可以修改其应用程序设置?如果是这样,他们在哪里?我想从我的ServiceConsole应用程序设置服务器的IP地址,以便安装客户端的用户不必担心它。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

将app.config添加到ServiceConsole的项目作为链接(添加现有项目,导航到它,然后从“添加”拆分按钮中选择“添加为链接”)。然后,您需要在链接的构建属性中设置它是“内容”和“始终复制”。最后,进入“发布”选项卡的“文件”对话框,并确保它列在那里。您可能需要“显示所有文件”才能看到它。

对于您的第二个问题:我倾向于不写入应用程序的设置文件,因为新写入的设置是每个用户。它们被隐藏在用户配置文件目录中的一个隐藏文件夹中。我建议使用此代码使用固定位置(如CSIDL_COMMON_DOCUMENTS):

Private Declare Function SHGetSpecialFolderPath Lib "shell32.dll" Alias "SHGetSpecialFolderPathA" _
    (ByVal hwndOwner As IntPtr, <Out()> ByVal lpszPath As StringBuilder, ByVal nFolder As Integer, ByVal fCreate As Boolean) As Boolean
Private Const CSIDL_COMMON_DOCUMENTS As Integer = &H2E

<snip>

Dim lpszPath As New StringBuilder(260)
If SHGetSpecialFolderPath(IntPtr.Zero, lpszPath, CSIDL_COMMON_DOCUMENTS, True) Then
    _sharedDocsDir = lpszPath.ToString()
Else
    Throw New InvalidDataException("Couldn't get working directory root.")
End If

要回答你的最后一个问题,我认为它适用于我的原因是我们使用System.Configuration而不是设计器生成的代码。您可以做的是将您的设置类拉出到第三个程序集(第四个?),然后通过两个项目引用该程序集。它可能比链接app.config更好。