2009-08-12 5 views
0

클라이언트 프로젝트, WindowsService 프로젝트 및 ServiceConsole 프로젝트가 포함 된 VS2008 솔루션이 있습니다. 배포 할 때 ServiceServices가 WindowsService의 app.config (즉, Settings.settings) 파일에 액세스해야 구성하기 때문에 WindowsService와 ServiceConsole을 같은 폴더에 포함하고 싶습니다. ClickOnce로 가능합니까? 그렇다면이를 달성하기위한 단계는 무엇입니까?ClickOnce 질문

다른 질문은 클라이언트 설정과 관련됩니다. 설치 파일이 파일 서버의 위치에 게시되면 응용 프로그램 설정을 수정할 수 있습니까? 그렇다면 그들은 어디에 위치하고 있습니까? 클라이언트를 설치하는 사용자가 걱정하지 않아도되도록 ServiceConsole 응용 프로그램에서 서버의 IP 주소를 설정하고 싶습니다.

도움 주셔서 감사합니다.

+0

Lenard, 내 업데이트 된 답변보기. –

답변

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

+0

Bob, 두 번째 질문에 다시 말했습니다. – Lenard