forked from PowerShell/PowerShell
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConsoleHostTranscript.cs
More file actions
138 lines (107 loc) · 3.66 KB
/
Copy pathConsoleHostTranscript.cs
File metadata and controls
138 lines (107 loc) · 3.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/********************************************************************++
Copyright (c) Microsoft Corporation. All rights reserved.
--********************************************************************/
using System;
using System.IO;
using System.Management.Automation.Host;
using System.Management.Automation.Internal;
using Dbg = System.Management.Automation.Diagnostics;
namespace Microsoft.PowerShell
{
internal sealed partial
class ConsoleHost
:
PSHost,
IDisposable
{
internal
bool
IsTranscribing
{
get
{
// no locking because the compare should be atomic
return _isTranscribing;
}
set
{
_isTranscribing = value;
}
}
private bool _isTranscribing;
/*
internal void StartTranscribing(string transcriptFilename, bool shouldAppend)
{
// lock so as not to contend with IsTranscribing and StopTranscribing
lock (transcriptionStateLock)
{
Dbg.Assert(transcriptionWriter == null, "writer should not exist");
this.transcriptFileName = transcriptFilename;
transcriptionWriter = new StreamWriter(transcriptFilename, shouldAppend, new System.Text.UnicodeEncoding());
transcriptionWriter.AutoFlush = true;
string format = ConsoleHostStrings.TranscriptPrologue;
string line =
StringUtil.Format(
format,
DateTime.Now,
Environment.UserDomainName,
Environment.UserName,
Environment.MachineName,
Environment.OSVersion.VersionString);
transcriptionWriter.WriteLine(line);
// record that we are transcribing...
isTranscribing = true;
}
}
*/
private string _transcriptFileName = String.Empty;
internal
string
StopTranscribing()
{
lock (_transcriptionStateLock)
{
if (_transcriptionWriter == null)
{
return null;
}
// The filestream *must* be closed at the end of this method.
// If it isn't and there is a pending IO error, the finalizer will
// dispose the stream resulting in an IO exception on the finalizer thread
// which will crash the process...
try
{
_transcriptionWriter.WriteLine(
StringUtil.Format(ConsoleHostStrings.TranscriptEpilogue, DateTime.Now));
}
finally
{
try
{
_transcriptionWriter.Dispose();
}
finally
{
_transcriptionWriter = null;
_isTranscribing = false;
}
}
return _transcriptFileName;
}
}
internal
void
WriteToTranscript(string text)
{
lock (_transcriptionStateLock)
{
if (_isTranscribing && _transcriptionWriter != null)
{
_transcriptionWriter.Write(text);
}
}
}
private StreamWriter _transcriptionWriter;
private object _transcriptionStateLock = new object();
}
} // namespace