2009-08-12 50 views
0

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

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

感谢您的任何帮助。

+0

Lenard,看我更新的答案。 – 2009-08-13 14:07:39

回答

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更好。

+0

Bob,我是否还需要在Settings.settings文件中链接?当我如你所说,然后编译,会出现大量的错误,如: 无法找到元素“userSettings”的架构信息。 \t 找不到元素“Server.Properties.Settings”的模式信息。 \t ServiceConsole没有任何Settings.setting文件。 – Lenard 2009-08-12 23:11:08

+0

鲍勃,我重申了第二个问题。 – Lenard 2009-08-12 23:29:07